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

如何提取XML中property元素的name与value属性列表?

解决方案:提取XML中带name和value的属性列表

你的问题核心是XML包含默认命名空间,之前的查询未处理命名空间导致无法匹配目标元素,以下是三种可行的实现方式:

方法1:LINQ to XML(推荐)

通过指定命名空间定位property元素,直接提取属性值:

using System;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        string xml = @"<root>
  <property name=""com.jaspersoft.studio.js.ic.path"" value=""/InputControls/pEnforcementStatusID"" xmlns=""http://jasperreports.sourceforge.net/jasperreports"" />
  <property name=""com.jaspersoft.studio.js.ic.label"" value=""Enforcement Status ID"" xmlns=""http://jasperreports.sourceforge.net/jasperreports"" />
  <defaultValueExpression xmlns=""http://jasperreports.sourceforge.net/jasperreports""><![CDATA[0]]></defaultValueExpression>
</root>";

        XDocument doc = XDocument.Parse(xml);
        // 声明XML默认命名空间
        XNamespace jrNs = "http://jasperreports.sourceforge.net/jasperreports";

        var propertyElements = doc.Descendants(jrNs + "property");
        int index = 1;
        foreach (var prop in propertyElements)
        {
            string nameAttr = $"name=\"{prop.Attribute("name")?.Value}\"";
            string valueAttr = $"\"{prop.Attribute("value")?.Value}\"";
            Console.WriteLine($"{index}. `{nameAttr}` 对应 value `{valueAttr}`");
            index++;
        }
    }
}

方法2:XPath(处理命名空间)

注册命名空间管理器,通过带前缀的XPath查询目标元素:

using System;
using System.Xml;

class Program
{
    static void Main()
    {
        string xml = @"<root>
  <property name=""com.jaspersoft.studio.js.ic.path"" value=""/InputControls/pEnforcementStatusID"" xmlns=""http://jasperreports.sourceforge.net/jasperreports"" />
  <property name=""com.jaspersoft.studio.js.ic.label"" value=""Enforcement Status ID"" xmlns=""http://jasperreports.sourceforge.net/jasperreports"" />
  <defaultValueExpression xmlns=""http://jasperreports.sourceforge.net/jasperreports""><![CDATA[0]]></defaultValueExpression>
</root>";

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);
        // 注册命名空间前缀
        XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
        nsMgr.AddNamespace("jr", "http://jasperreports.sourceforge.net/jasperreports");

        XmlNodeList propertyNodes = doc.SelectNodes("//jr:property", nsMgr);
        int index = 1;
        foreach (XmlNode node in propertyNodes)
        {
            string nameAttr = node.Attributes["name"].OuterXml;
            string valueAttr = node.Attributes["value"].OuterXml.Split('=')[1];
            Console.WriteLine($"{index}. `{nameAttr}` 对应 value `{valueAttr}`");
            index++;
        }
    }
}

方法3:XmlReader

读取时校验元素的命名空间和本地名称,匹配后提取属性:

using System;
using System.IO;
using System.Xml;

class Program
{
    static void Main()
    {
        string xml = @"<root>
  <property name=""com.jaspersoft.studio.js.ic.path"" value=""/InputControls/pEnforcementStatusID"" xmlns=""http://jasperreports.sourceforge.net/jasperreports"" />
  <property name=""com.jaspersoft.studio.js.ic.label"" value=""Enforcement Status ID"" xmlns=""http://jasperreports.sourceforge.net/jasperreports"" />
  <defaultValueExpression xmlns=""http://jasperreports.sourceforge.net/jasperreports""><![CDATA[0]]></defaultValueExpression>
</root>";

        using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
        {
            string targetNs = "http://jasperreports.sourceforge.net/jasperreports";
            int index = 1;
            while (reader.Read())
            {
                // 匹配带目标命名空间的property元素
                if (reader.NodeType == XmlNodeType.Element 
                    && reader.NamespaceURI == targetNs 
                    && reader.LocalName == "property")
                {
                    string name = reader.GetAttribute("name");
                    string value = reader.GetAttribute("value");
                    string nameAttr = $"name=\"{name}\"";
                    string valueAttr = $"\"{value}\"";
                    Console.WriteLine($"{index}. `{nameAttr}` 对应 value `{valueAttr}`");
                    index++;
                }
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:54:25