我需要閱讀以下 xml 檔案。我使用過 XML 和 LINQ,但它們都沒有顯示任何值。我在代碼上找不到任何錯誤。我已經關注了這個例子,它與那里顯示的 XML 一起作業得很好。
<dataSet>
<transactions>
<trans>1</trans>
<Amount>1000</Amount>
<Name>1000</Name>
<Type>Income</Type>
<Date>2022-04-21T00:00:00 05:30</Date>
</transactions>
</dataSet>
我用過這段代碼。
using System;
using System.Xml;
namespace ReadXMLInCsharp
{
class Program
{
static void Main(string[] args)
{
//create XMLDocument object
XmlDocument xmlDoc = new XmlDocument();
//returns url of main directory which contains "/bin/Debug"
var url = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
//correction in path to point it in Root directory
var mainpath = ("F:\\Education\\Test\\new.xml");
//load xml file
xmlDoc.Load(mainpath);
XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/dataSet/transactions");
var NodeStr = "";
foreach (XmlNode node in nodeList)
{
NodeStr = NodeStr "\nTransaction " node.SelectSingleNode("trans").InnerText;
}
Console.WriteLine(NodeStr);
}
}
}
uj5u.com熱心網友回復:
您的 xml DataSet 節點具有命名空間屬性,因此您需要洗掉它或使用 XmlNamespaceManager 來處理它。這是兩者的小提琴:
https://dotnetfiddle.net/EOXtBN
首先,我將 xml 加載到一個字串中,然后使用 .Replace:
xmlDoc.LoadXml(getXML().Replace(" xmlns='tempuri.org/DataSet.xsd'", ""));
可能不是最優的,因為該名稱空間可能是有原因的,但這可能是您的一個選擇。這是我要先作業的那個。
其次,我使用 XmlNamespaceManager 來處理決議。它不會增加那么多開銷:
xmlDoc.LoadXml(getXML());
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("ns", "tempuri.org/DataSet.xsd");
nodeList = xmlDoc.DocumentElement.SelectNodes("//ns:DataSet//ns:transactions", nsmgr);
foreach (XmlNode node in nodeList) {
NodeStr = NodeStr "\nTransaction " node.SelectSingleNode("ns:trans", nsmgr).InnerText;
}
另外,請記住,您可以只在節點串列的 xpath 中包含 ns:trans,如下所示:
nodeList = xmlDoc.DocumentElement.SelectNodes("//ns:DataSet//ns:transactions//ns:trans", nsmgr);
foreach (XmlNode node in nodeList) {
NodeStr = NodeStr "\nTransaction " node.InnerText;
}
Console.WriteLine(NodeStr);
你也可以使用 = 來清理它:
nodeList = xmlDoc.DocumentElement.SelectNodes("//ns:DataSet//ns:transactions//ns:trans", nsmgr);
foreach (XmlNode node in nodeList) {
NodeStr = "\nTransaction " node.InnerText;
}
Console.WriteLine(NodeStr);
讓我知道這是否適合您。
uj5u.com熱心網友回復:
您的 XML 檔案有并且您正在通過資料集決議它。“s”在您的代碼中是小寫的。將其設定為 XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/dataSet/transactions");
還要檢查 XML 的路徑是否正確。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460764.html
上一篇:OpenJDK版本控制
