You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中对比XML与JSON指定路径下标签值的实现方案

Pythonic Way to Validate XML-to-JSON Mapping via Path Parsing

Absolutely! There's a clean, Pythonic approach to parse those paths, extract the target values, and check if your XML and JSON data map correctly. Let's walk through how to do this step by step.

1. Extract Values from the XML Path

Your XML path statistics.model[].name means we need to grab the name text from every model element under the statistics parent. Using Python's built-in xml.etree.ElementTree, we can do this neatly with list comprehensions:

  • First, use findall() to fetch all model elements under statistics
  • Then extract the name text from each element in one line

2. Extract Values from the JSON Path

The JSON path statistics[].name is straightforward: we need the name value from every item in the statistics list. Again, list comprehensions are perfect here—they keep the code concise and readable.

3. Compare Values & Validate Mapping

Once we have both lists of names, we just need to check if they match exactly (order and values). If they do, we print your success message.

Full Example Code

import xml.etree.ElementTree as ET
import json

# ----------------------
# Sample XML Data (built with xml.etree.ElementTree)
# ----------------------
root = ET.Element("root")
statistics = ET.SubElement(root, "statistics")

# Add sample model entries
model_a = ET.SubElement(statistics, "model")
ET.SubElement(model_a, "name").text = "UserAnalytics"
model_b = ET.SubElement(statistics, "model")
ET.SubElement(model_b, "name").text = "SalesForecast"

# ----------------------
# Sample JSON Data
# ----------------------
json_payload = {
    "statistics": [
        {"name": "UserAnalytics"},
        {"name": "SalesForecast"}
    ]
}

# ----------------------
# Path Parsing Functions
# ----------------------
def get_xml_names(xml_root, path):
    # Split path into components: ['statistics', 'model[]', 'name']
    parent, list_elem, target = path.split('.')
    # Convert "model[]" to "model" for findall
    list_elem_clean = list_elem.replace('[]', '')
    # Fetch all model elements under statistics
    models = xml_root.findall(f"./{parent}/{list_elem_clean}")
    # Extract name text from each model (handles missing names gracefully with None)
    return [model.findtext(target) for model in models]

def get_json_names(json_data, path):
    # Split path into components: ['statistics[]', 'name']
    list_key, target = path.split('.')
    # Convert "statistics[]" to "statistics"
    list_key_clean = list_key.replace('[]', '')
    # Extract name from each item in the statistics list
    return [item.get(target) for item in json_data[list_key_clean]]

# ----------------------
# Validate Mapping
# ----------------------
xml_name_list = get_xml_names(root, "statistics.model[].name")
json_name_list = get_json_names(json_payload, "statistics[].name")

if xml_name_list == json_name_list:
    print('Mapped succesfuly between XML path and Json Path')
else:
    print("Mapping failed: Mismatched values or order")

Key Notes

  • Pythonic Style: We use list comprehensions for concise value extraction, which is idiomatic Python.
  • Graceful Handling: findtext() (for XML) and get() (for JSON) return None if the target element/key is missing, avoiding crashes.
  • Lightweight: No third-party libraries needed—we use Python's built-in modules, which keeps things simple.

If you need to handle more complex paths (like nested lists or conditional filters), you could look into libraries like jsonpath-ng (for JSON) or lxml with XPath (for XML), but this approach works great for your specific use case.

内容的提问来源于stack exchange,提问作者JerryC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:47:52