簡體   English   中英

XML節點計數為零

[英]XML Nodes Count is zero

我在.Net 2.0中有C#項目。 我試圖讀取所有Event節點並將其TextData屬性存儲在字符串列表中。 但是,跟隨SelectNodes的計數為零。

在字符串列表中存儲所有Event節點的所有TextData值的最佳方法是什么?

注意:某些事件節點不具有TextData。

XmlDocument doc = new XmlDocument();
doc.Load(@"D:\\Lijo\1.xml");

XmlNodeList xnList = doc.SelectNodes("/Events/Event");

XML:

<?xml version="1.0" encoding="utf-16"?>
<TraceData xmlns="http://tempuri.org/TracePersistence.xsd">
  <Header>
    <TraceProvider name="Microsoft SQL Server" MajorVersion="9" MinorVersion="0" BuildNumber="3282" />
  </Header>
  <Events>
    <Event id="15" name="Audit Logout">
      <Column id="12" name="SPID">57</Column>
      <Column id="14" name="StartTime">2014-04-20T18:00:30.573-04:00</Column>
      <Column id="16" name="Reads">6512</Column>
      <Column id="18" name="CPU">0</Column>
      <Column id="9" name="ClientProcessID">3884</Column>
      <Column id="13" name="Duration">70046000</Column>
      <Column id="17" name="Writes">0</Column>
    </Event>


    <Event id="10" name="RPC:Completed">
      <Column id="12" name="SPID">57</Column>
      <Column id="14" name="StartTime">2014-04-20T18:01:40.637-04:00</Column>
      <Column id="16" name="Reads">76</Column>
      <Column id="18" name="CPU">0</Column>
      <Column id="1" name="TextData">exec uspTranslationsGetTranslationByPageName @PageName='invWLUnSuspendReasonCode.aspx',@LanguageID=1</Column>
      <Column id="9" name="ClientProcessID">3884</Column>
      <Column id="13" name="Duration">226</Column>
      <Column id="17" name="Writes">0</Column>
    </Event>

  </Events>
</TraceData>

您可以使用XmlNamespaceManager為名稱空間URI映射添加前綴。 然后使用XPath中的前綴訪問相應命名空間中的元素。

var nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("d", "http://tempuri.org/TracePersistence.xsd");

XmlDocument doc = new XmlDocument();
doc.Load(@"D:\\Lijo\1.xml");

XmlNodeList xnList = doc.SelectNodes("//d:Events/d:Event", nsManager);

更新:

要在字符串列表中獲取所有TextData ,您可以嘗試這種方式:

XmlNodeList xnList = doc.SelectNodes("d:TraceData/d:Events/d:Event/d:Column[@name='TextData']", nsManager);
var result = new List<string>();
foreach (XmlNode node in xnList)
{
    result.Add(node.InnerText);
}

您可以閱讀XML ,例如:

<?xml version="1.0" encoding="UTF-8"?>
<Home>
  <TextEntries>
  <follow>
      <item visible="true" navid="fb" url="https://www.facebook.com/" type="text" hideineditor="false" esbname="facebook  Follow Link" linktype="new" id="200038"><![CDATA[facebook]]></item>
      <item visible="true" navid="twitter" url="https://twitter.com/" type="text" hideineditor="false" esbname="twitter  Follow Link" linktype="new" id="200039"><![CDATA[twitter]]></item>
   </follow>
 </TextEntries>
</Home>

閱讀節點:

  XmlElement root = null;
  XmlDocument doc = new XmlDocument();
  doc.Load(sourceXmlFilePath);
  root = doc.DocumentElement;
  XmlNode rootnode = root.SelectSingleNode("//Home//TextEntries");
  XmlNode followNode = root.SelectSingleNode("//Home//TextEntries//follow");
  string myAttribute=followNode.ChildNodes[0].Attributes["id"].Value;//this will read the attribute ID of first inner element
 string myFirstInnerNodeValue=followNode.ChildNodes[0].InnerText;//this will read the data of first inner node i.e facebook

希望這對你有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM