无法通过使用selectSingleNode方法获取节点

时间:2016-11-08 05:41:18

标签: c# xml

我的xml文件如下所示:

var newItems = "1,1,0,1,1,0,1,1,0,1,1,0",
    everyThirdItem = newItems.split(",")
                       .filter(function(_, idx) { return ((idx + 1) % 3) === 0 });

console.log(everyThirdItem)

但是我的代码无法获得元素“OVSCTicketID”的值:

<?xml version="1.0"?>
<UpdateInboundim613Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" status="SUCCESS" message="Success" schemaRevisionDate="2016-07-19" schemaRevisionLevel="0" returnCode="0" xmlns="http://schemas.hp.com/SM/7">
    <model>
        <keys>
            <TransactionID type="String">E-InHPSXIM1089779</TransactionID>
        </keys>
        <instance uniquequery="TransactionID=&quot;E-InHPSXIM1089779&quot;" recordid="E-InHPSXIM1089779">
            <TransactionDetailedTrace xsi:nil="true" />
            <TransactionMessage type="Array">
                <TransactionMessage type="String" />
            </TransactionMessage>
            <OVSCSolutionDescription type="Array">
                <OVSCSolutionDescription type="String">Issue: EL-BANK OUTSIDE WAREHOUSE EGYPT IMEA[2702]Interface[[E1 0/0/0]]|Router|ELBKCE1GW /pg-h-pg1252-256675160|143.34.213.18|Down Solution: As per update from Mai Shrief that the site has been suspended on 30th June. So no need of any investigation. Resolved By: BT NOC</OVSCSolutionDescription>
            </OVSCSolutionDescription>
            <OVSCTicketID type="String">E-IM004004076</OVSCTicketID>
            <RIMSImpact xsi:nil="true" />
            <attachments />
        </instance>
    </model>
    <messages>
        <message type="String" xmlns="http://schemas.hp.com/SM/7/Common">TransactionStatusDetail in $L.file is:IM Ticket: E-IM004004076 is valid for Update Subtype: Resolve</message>
    </messages>
</UpdateInboundim613Response>

你能告诉我这是什么问题以及如何解决它?

2 个答案:

答案 0 :(得分:3)

您的Xml文档使用默认命名空间“http://schemas.hp.com/SM/7”。您需要使用XmlNamespaceManager在此命名空间下选择该节点。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\zzx\Project\SM\R5.1\Harness\InBound.xml");
var namespaceManager = new XmlNamespaceManager(xmlDoc.NameTable);
namespaceManager.AddNamespace("ns", "http://schemas.hp.com/SM/7");
XmlNode sigNode = xmlDoc.SelectSingleNode("//ns:UpdateInboundim613Response//ns:model//ns:instance//ns:OVSCTicketID",namespaceManager);
if (sigNode != null)
{
    Console.WriteLine(sigNode.InnerText);
}

上面的代码应该可以正常工作。

答案 1 :(得分:1)

使用xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XNamespace defaultNs = ((XElement)doc.FirstNode).GetDefaultNamespace();
            string ovsCTicketID = (string)doc.Descendants(defaultNs + "OVSCTicketID").FirstOrDefault();
        }
    }
}