标签: selectnodes

XmlDocument.SelectSingleNode和xmlNamespace问题

我正在将字符串加载到包含以下结构的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">                  
  <ItemGroup>
    <Compile Include="clsWorker.cs" />        
  </ItemGroup>      
</Project>
Run Code Online (Sandbox Code Playgroud)

然后我将所有加载到xmldocument:

XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(Xml);
Run Code Online (Sandbox Code Playgroud)

然后出现以下问题:

XmlNode Node = xmldoc.SelectSingleNode("//Compile"); // return null
Run Code Online (Sandbox Code Playgroud)

当我从根元素(Project)中删除xmlns属性时,它的工作正常,如何改进我的SelectSingleNode以返回相关元素?

c# xml xmldocument selectnodes selectsinglenode

44
推荐指数
3
解决办法
6万
查看次数

如何使用XPath表达式选择所有叶节点?

我相信这是可能的,但无法弄清楚语法.像这样的东西:

xmlNode.SelectNodes("//*[count(child::*) <= 1]")
Run Code Online (Sandbox Code Playgroud)

但这不正确.

syntax xpath selectnodes

41
推荐指数
2
解决办法
2万
查看次数

C#XmlDocument SelectNodes不起作用

我想从XML文件中获取值但是我失败了.能帮我指出问题吗?因为我已经非常努力地测试和谷歌搜索,但我仍然无法发现问题.

XML:

<?xml version="1.0" encoding="utf-8" ?> 
<Contacts>
  - <Contact>
    <ID>xxx</ID> 
      <AutoUpdateEnabled>false</AutoUpdateEnabled> 
      <LastChanged>2013-05-29T01:53:59.4470000Z</LastChanged> 
    - <Profiles>
        - <Personal>
              <FirstName>My First Name</FirstName> 
              <LastName>My Last Name</LastName> 
              <UniqueName>My Unique Name</UniqueName> 
              <SortName></SortName> 
              <DisplayName>My Display Name</DisplayName> 
          </Personal>
    </Profiles>
    - <Phones>
        - <Phone>
          <ID>3</ID> 
          <PhoneType>Mobile</PhoneType> 
          <Number>000-0000000</Number> 
          <IsIMEnabled>false</IsIMEnabled> 
          <IsDefault>false</IsDefault> 
          </Phone>
    </Phones>
    - <Locations>
        - <Location>
              <ID>2</ID> 
              <LocationType>Business</LocationType> 
              <CompanyName></CompanyName> 
              <IsDefault>false</IsDefault> 
          </Location>
      </Locations>
</Contact>
- <Contact>
  <ID>xxx</ID> 
  <AutoUpdateEnabled>false</AutoUpdateEnabled> 
  <LastChanged>2013-05-29T01:53:25.2670000Z</LastChanged> 
    - <Profiles>
        - <Personal>
              <FirstName>Person</FirstName> 
              <LastName>Two</LastName> 
              <UniqueName></UniqueName> 
              <SortName></SortName> 
              <DisplayName>Person Two</DisplayName> 
          </Personal>
      </Profiles>
    - <Emails>
        - <Email>
              <ID>1</ID> 
              <EmailType>Personal</EmailType> 
              <Address>MyTest@gmail.com</Address> 
              <IsIMEnabled>false</IsIMEnabled> 
              <IsDefault>true</IsDefault> 
          </Email> …
Run Code Online (Sandbox Code Playgroud)

c# xml selectnodes

10
推荐指数
1
解决办法
6万
查看次数

如何创建条件Xpath语句?

我想选择带有条件Xpath的xml节点 -

xmlnode.SelectSingleNode("if (ns:substanceAdministration/ns:consumable/@typeCode == UNK) then evaluateThisXpath else evaluateOtherXpath")
Run Code Online (Sandbox Code Playgroud)

我担心的是 -

<drugID code="UNK">
    <sub code="2232" />
</drugID>
Run Code Online (Sandbox Code Playgroud)

如果父节点的@code是UNK,那么只有它应该取子节点的@code值,否则取父@code值.

xml xpath selectnodes

8
推荐指数
2
解决办法
1万
查看次数

获取所有子元素节点名称和值的XElement

我正在考虑这样的方法.如果这实际上可以这样工作,请告诉我:对于示例XML:

<Root>
  <Node>
    <SubEl1>abc</SubEl1>
    <SubEl2>def</SubEl2>
    <SubEl3>123</SubEl3>
    <SubEl4>456</SubEl4>      
  </Node>
</Root>
Run Code Online (Sandbox Code Playgroud)

想要进入<Node>,循环检查节点/元素名称并获取它的值.像这样的东西,比如名字'SubEl1'对task1使用'abc',看到元素名称是'SubEl2'我做task2.必须检查所有子元素!

示例(不工作代码):

 //looping through 'Node' children
        switch(SubElName for 'Node element) 
        {
          case : 'SubEl1' 
            //Do Task1 using the SubEl1's value/TextName ...
          case: 'SubEl2' 
           //Task2 ...
          ... 
          case: default //Do default task.....
        } 
    //end loop
Run Code Online (Sandbox Code Playgroud)

如果你能想到任何其他方法(XElement,XmlDocument,SelectNodes()等,那也将受到赞赏!

c# xelement xmldocument selectnodes

7
推荐指数
1
解决办法
2万
查看次数

HtmlAgilityPack SelectNodes表达式忽略具有特定属性的元素

我试图选择除脚本节点以外的节点和一个名为'relativeNav'的类的ul.有人可以指引我走正确的道路吗?我已经搜索了一个星期,我无法在任何地方找到它.目前我有这个,但它显然也选择了// ul [@ class ='relativeNav'].反正是否有一个NOT表达式,以便SelectNode会忽略那个?

        foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//body//*[not(self::script)]/text()"))
        {
            Console.WriteLine("Node: " + node);
            singleString += node.InnerText.Trim() + "\n";
        }
Run Code Online (Sandbox Code Playgroud)

c# xpath selectnodes html-agility-pack

6
推荐指数
1
解决办法
5541
查看次数

XmlNodeList(为什么这是空的)

我无法理解为什么这个NodeList是空的

XmlDocument document = new XmlDocument();
document.Load(xmlpath);    
XmlNodeList nodes = document.SelectNodes("/StructureResponse/rootItem/attributes/Attribute");
Run Code Online (Sandbox Code Playgroud)

这里是XmlFile

<?xml version="1.0" encoding="utf-8"?>
<StructureResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://nts-de-osm1-pxc/webservices/">
    <consolidatedItems xsi:nil="true" xmlns="http://systinet.com/wsdl/com/osm/webservices/service/" />
    <rootItem xsi:type="Part" xmlns="http://systinet.com/wsdl/com/osm/webservices/service/">
        <attributes>
            <Attribute>
                <dataDictionary xsi:nil="true" />
                <dataType>string</dataType>
                <displayName>IDENT_NR</displayName>
                <key>true</key><name>IDENT_NR</name>
                <searchable>true</searchable>
                <userAttribute>true</userAttribute>
                <value>9662744</value>
            </Attribute>
            <Attribute>
                <dataDictionary xsi:nil="true" />
                <dataType>string</dataType>
                <displayName>AI</displayName>
                <key>true</key><name>AI</name>
                <searchable>true</searchable>
                <userAttribute>true</userAttribute>
                <value>00</value>
            </Attribute>
        </rootItem>
    </StructureResponse>
Run Code Online (Sandbox Code Playgroud)

在最终脚本中,我想获得一个包含其中每个属性的数组字符串.

谢谢Stefan

c# xml selectnodes

5
推荐指数
2
解决办法
3470
查看次数

SelectNodes和GetElementsByTagName

SelectNodes和GetElementsByTagName之间的主要区别是什么.

html xml dom selectnodes getelementsbytagname

4
推荐指数
1
解决办法
6937
查看次数

XmlDocument.SelectSingleNode和前缀+ xmlNamespace问题

我将以下字符串加载到XML文档:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">   
   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Server</faultcode>
         <faultstring>El cliente con los parámetros introducidos no existe./faultstring>
         <detail>
            <ns:ClienteWSDo29Exception xmlns:ns="http://services.do29.imq.es">
               <Do29Exception xmlns="http://services.do29.imq.es" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ax211="http://model.do29.imq.es/xsd" xmlns:ax213="http://dto.do29.imq.es/xsd" xmlns:ax29="http://exception.do29.imq.es/xsd" xsi:type="ax29:Do29Exception">
                  <ax29:classname>class es.imq.do29.dao.ClienteDaoImpl</ax29:classname>
                  <ax29:trace xsi:nil="true" />
                  <ax29:previous xsi:nil="true" /> 
                  <ax29:method>getCliente</ax29:method>
                  <ax29:id>1</ax29:id>
                  <ax29:message>El cliente con los parámetros introducidos no existe.</ax29:message>
               </Do29Exception>
            </ns:ClienteWSDo29Exception>
         </detail>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

然后在xml中使用命名空间的情况我试过:

XmlDocument xmldocu = new XmlDocument();
xmldocu.LoadXml(xml);
XmlNamespaceManager namespaces = new XmlNamespaceManager(xmldocu.NameTable);
namespaces.AddNamespace("ax29", "http://services.do29.imq.es");
XmlNode nodemsgx = xmldocu.SelectSingleNode("//message", namespaces);
XmlNode nodemsg = xmldocu.SelectSingleNode("//ax29:message", namespaces);
Run Code Online (Sandbox Code Playgroud)

但是nodemsgx和nodemsg是null:S怎么做正确的方法呢?我使用//消息因为我想要获得该类型的任何节点而不是该节点的特定路径...

c# xml xpath selectnodes

4
推荐指数
1
解决办法
6695
查看次数

MSXML选择节点不起作用

我正在开发一个自动化测试应用程序,目前我正在编写一个函数来比较两个XML文件之间的值,这些文件应该是相同的,但可能不是.以下是我正在尝试处理的XML示例:

<?xml version="1.0" encoding="utf-8"?>
<report xmlns="http://www.**.com/**">
  <subreport name="RBDReport">
    <record rowNumber="1">
      <field name="Time">
        <value>0</value>
      </field>
      <field name="Reliability">
        <value>1.000000</value>
      </field>
      <field name="Unreliability">
        <value>0.000000</value>
      </field>
      <field name="Availability">
        <value> </value>
      </field>
      <field name="Unavailability">
        <value> </value>
      </field>
      <field name="Failure Rate">
        <value>N/A</value>
      </field>
      <field name="Number of Failures">
        <value> </value>
      </field>
      <field name="Total Downtime">
        <value> </value>
      </field>
    </record>
Run Code Online (Sandbox Code Playgroud)

(注意,可能有多个<subreport>元素,其中包含多个<record>元素.)

我想要的是提取<value>两个文档的标签,然后比较它们的值.那部分我知道怎么做.问题在于提取本身.

由于我遇到了C++,我正在使用MSXML,并编写了一个包装器,允许我的应用程序抽象出实际的XML操作,以防我决定更改我的数据格式.

该包装器CSimpleXMLParser加载XML文档并将其"最高记录"设置为XML文档的document元素.(CRecord是一个抽象类,其CXMLRecord是其子类之一,它可以单独或按组访问子记录,还允许访问Record的"值"(对于子元素或属性的值,在CXMLRecord的情况下) .)CXMLRecord包含一个MSXML :: MSXMLDOMNodePtr和一个指向CSimpleXMLParser实例的指针.)包装器还包含返回子项的实用程序函数,CXMLRecord用它来返回子记录.

在我的代码中,我执行以下操作(尝试返回所有<subreport>节点只是为了查看它是否有效):

CSimpleXMLParser parserReportData;
parserReportData.OpenXMLDocument(strPathToXML);
bool bGetChildrenSuccess = parserReportData.GetFirstRecord()->GetChildRecords(listpChildren, _T("subreport"));
Run Code Online (Sandbox Code Playgroud)

这总是返回false.CXMLRecord :: GetChildRecords()的实现基本上是肉

MSXML2::IXMLDOMNodeListPtr pListChildren …
Run Code Online (Sandbox Code Playgroud)

c++ xpath msxml selectnodes

3
推荐指数
1
解决办法
6074
查看次数