[英]Reading XML in C# having multiple similar nodes
在一個項目中,我正在讀取XML文件以獲取字符串數據。 它工作得很好,但有一個例外。 這是XML File的結構:
<Table>
<row>
<queryId>customAnalyticsParam</queryId>
<queryStatement>
1|-1|-1|-1
</queryStatement>
</row>
</Table>
表標簽包含多個行標簽。 每個行標記都由queryId標記區分。 上面的結構與以下代碼配合得很好:
string query = "";
XmlDocument xd = new XmlDocument();
xd.Load(xml_query_filePath);
XmlNode xnode = xd.SelectNodes("/Table/row/queryId[.='" + id.Trim() + "']")[0];
query = xnode.NextSibling.NextSibling.InnerText;
在上面的代碼中,第三行ID是函數參數中提供的queryId。 當XML采用以下格式時,會出現異常:
<Table>
<row>
<queryId>
customAnalyticsParam
</queryId>
<queryStatement>
1|-1|-1|-1
</queryStatement>
</row>
</Table>
那就是queryId節點之前和之后的行間距。 由於這些換行符,代碼無法找到該節點並返回null。
請幫助我找到一種方法。
謝謝
嘗試使用normalize-space :
XmlNode xnode = xd.SelectNodes("/Table/row/queryId[normalize-space(.)='" + id.Trim() + "']").[0];
您還可以使用帶有簡單Trim()
方法的LINQ to XML來刪除空格
var xdoc = XDocument.Load(xml_query_filePath);
var statements = from r in xdoc.Descendants("row")
let queryId = (string)r.Element("queryId")
let statement = (string)r.Element("queryStatement")
where queryId.Trim() == id.Trim()
select statement.Trim();
或者,如果您只需要第一個語句(請注意,如您的代碼中所示,元素應存在於xml中)
var statement = xdoc.Descendants("row")
.First(r => r.Element("queryId").Value.Trim() == id.Trim())
.Element("queryStatement").Value.Trim();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.