[英]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.