mat*_*esh 0 c# xml xpath xmldocument
加载函数已在xmlData类中定义
public class XmlData
{
public void Load(XElement xDoc)
{
var id = xDoc.XPathSelectElements("//ID");
var listIds = xDoc.XPathSelectElements("/Lists//List/ListIDS/ListIDS");
}
}
Run Code Online (Sandbox Code Playgroud)
我只是从我的角度调用Load函数.
XmlData aXmlData = new XmlData();
string input, stringXML = "";
TextReader aTextReader = new StreamReader("D:\\test.xml");
while ((input = aTextReader.ReadLine()) != null)
{
stringXML += input;
}
XElement Content = XElement.Parse(stringXML);
aXmlData.Load(Content);
Run Code Online (Sandbox Code Playgroud)
在加载函数中,即时获取id和listIds为null.
我的test.xml包含
<SEARCH>
<ID>11242</ID>
<Lists>
<List CURRENT="true" AGGREGATEDCHANGED="false">
<ListIDS>
<ListID>100567</ListID>
<ListID>100564</ListID>
<ListID>100025</ListID>
<ListID>2</ListID>
<ListID>1</ListID>
</ListIDS>
</List>
</Lists>
</SEARCH>
Run Code Online (Sandbox Code Playgroud)
编辑:您的示例XML 不会有一个id与命名空间元素nss的别名.这将是<nss:id>在这种情况下,或有会是一个默认的命名空间设置.我认为这个答案是,在现实中,你正在寻找的元素是在命名空间.
您的查询正在尝试查找id在根级别调用的元素.要查找所有 id元素,您需要:
var tempId = xDoc.XPathSelectElements("//nss:id", ns);
Run Code Online (Sandbox Code Playgroud)
......虽然我亲自使用:
XDocument doc = XDocument.Parse(...);
XNamespace nss = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";
// Or use FirstOrDefault(), or whatever...
XElement idElement = doc.Descendants(nss + "id").Single();
Run Code Online (Sandbox Code Playgroud)
(我更喜欢在LINQ to XML类型而不是XPath上使用查询方法...我发现更容易避免愚蠢的语法错误等)
您的示例代码也不清楚,因为您正在使用xDoc尚未声明...它有助于编写完整的示例,理想情况下包括编译和作为控制台应用程序运行所需的所有内容.
| 归档时间: |
|
| 查看次数: |
6755 次 |
| 最近记录: |