XmlDocument并使用xPath获取特定属性

本文关键字:属性 获取 xPath XmlDocument | 更新日期: 2023-09-27 18:01:04

我在这里看到了几个例子,其中Xpath与XmlDocument结合使用,从XmlDocument节点获取特定属性。。。。示例

Console.WriteLine(xmlDocument.SelectSingleNode("//dataTemplateSpecification/templates/template/elements/element/@name").Value.ToString());

由于某种原因,我得到了一个"对象引用未设置为对象实例"的异常。每当我遇到特定的代码行时。我有一个小的测试应用程序,我已经建立了测试不同的东西,然后我把它们放进我的主要项目。。。

这是它的代码。。。

namespace ReadXml
{
    class Program
    {
        static void Main(string[] args)
        {
            //string fulXmlPath =     System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/templateExample.xml");
            XDocument xDocument = XDocument.Load("C:''Users''derekww''Documents''XML Documents''templateExample.xml");
            XElement elem = xDocument.Element("dataTemplateSpecification"); ;
            XmlDocument xmlDocument = new XmlDocument();
            StreamReader file = new StreamReader("C:''Users''derekww''Documents''XML Documents''templateExample.xml");
            xmlDocument.Load(file);
            //XmlDocument theDoc = new XmlDocument();
            //using (var xmlReader = xDocument.CreateReader())
            //{
            //    xmlDocument.Load(xmlReader);
            //}
            //Console.WriteLine(elem.ToString());
            XmlNode xNode = xmlDocument.SelectSingleNode("//dataTemplateSpecification/templates/template/elements/element");
            Console.WriteLine("WORK PLEASE!!!! {0}", xNode.Value.ToString());
            //Console.WriteLine(xmlDocument.SelectSingleNode("//dataTemplateSpecification/templates/template/elements/element/@name").Value.ToString());
            //Console.WriteLine("This better Work>>>> {0}", xmlDocument.Attributes["/dataTemplateSpecification/templates/template/elements/element/@name"].Value);
            Console.ReadLine();
            //Console.WriteLine("This better Work>>>> {0}", xmlDocument.SelectSingleNode("//dataTemplateSpecification/templates/template/elements/element/@name").Value);
            //foreach (String AttVal in xmlDocument.SelectSingleNode("//dataTemplateSpecification/templates/template/elements/element/@name").Value)
            {
                //Console.WriteLine("This better Work>>>> {0}", AttVal);
            }
        }
    }
}

以下是我使用的XML的一部分。。。

    <?xml version="1.0" encoding="utf-8"?>
    <dataTemplateSpecification id="id1" name="name1" xmlns="http://EADIS.upmc.com      /DataTemplateSpecification.xsd">
      <description xmlns="">
        <html>text</html>
      </description>
      <templates xmlns="">
        <template>
          <elements>
            <element id="element0" name="PatientId" display="Patient ID"  dataType="String" value="0101010111111" visable="false" readOnly="true">
              <validation>
                <rules>
                  <rule id="0" test="#element0.value == ''">
                    <fail>
                      <html><b>Patient ID is null, value must be present</b></html>
                    </fail>
                  </rule>
                </rules>
              </validation>
            </element>
           </elements>
          </template>
         <templates>

我刚刚向您展示了理解xml结构所需的部分。我向你保证,它的形式很好。我想我以前问过这个问题,但不知怎么的,它没有被发布(也许我忘了,谁知道呢(。如有任何帮助,我们将不胜感激。如果我能找出它不起作用的原因,我一定会让你们知道的。

谢谢。

XmlDocument并使用xPath获取特定属性

为什么不能使用此XPath:

xmlDocument.SelectSingleNode("//templates/template/elements/element/@name").Value

您需要在代码中指定XML文件的名称空间
请参阅此处了解更多信息:当根节点具有属性时,如何选择xml根节点?