【发布时间】:2019-03-06 20:36:33
【问题描述】:
这是我第一次使用 XPath。
这是我的 XML:
<content type="application/xml">
<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
<d:Guid>YOIYOI-HNON-OIN</d:Guid>
<d:ObjectId>6000009251</d:ObjectId>
<d:ProcessType>ZMIN</d:ProcessType>
<d:ProcessTypeTxt>Incident</d:ProcessTypeTxt>
<d:Description>Test 2</d:Description>
<d:IntroText>Incident</d:IntroText>
<d:CreatedAtDateFormatted>08.05.18</d:CreatedAtDateFormatted>
<d:ChangedAtDateFormatted>08.05.18</d:ChangedAtDateFormatted>
<d:PostingDate>2018-05-08T00:00:00</d:PostingDate>
<d:ChangedAtDate>2018-05-08T00:00:00</d:ChangedAtDate>
<d:Priority>2</d:Priority>
<d:PriorityTxt>2: High</d:PriorityTxt>
<d:PriorityState>None</d:PriorityState>
<d:Concatstatuser>New</d:Concatstatuser>
<d:ActionRequired>false</d:ActionRequired>
<d:StillOpen>true</d:StillOpen>
<d:Icon></d:Icon>
<d:SoldToPartyName></d:SoldToPartyName>
<d:ServiceTeamName></d:ServiceTeamName>
<d:PersonRespName></d:PersonRespName>
<d:ConfigItemTxt></d:ConfigItemTxt>
</m:properties>
</content>
还有其他内容节点。
我需要检索特定的标签值,例如:
- d:Guid
- d:进程类型
- d:描述
- 等等..
但我不需要所有标签值。
我尝试了一个在线 Xpath 验证器,我在其中发布了我的 XML 并使用了这个表达式:
//content/m:properties/d:Guid | //content/m:properties/d:ObjectId
这为我提供了我需要的数据,但是当我在 c# 应用程序中使用它时,它返回 null。有人可以向我解释为什么会这样吗?除了使用 XPath 之外,还有其他方法吗?
这是我的 C# 代码:
string xml = System.IO.File.ReadAllText(startupPath);
StringBuilder sb = new StringBuilder();
using (var node = ChoXmlReader.LoadText(xml).WithXPath("//content/m:properties/d:Guid or //content/m:properties/d:ObjectId"))
{
using (var w = new ChoCSVWriter(sb).WithFirstLineHeader())
{
w.Write(node);
}
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
【问题讨论】:
-
欢迎来到 Stack Overflow。请您提供minimal reproducible example 吗?我们不知道
ChoXmlReader或ChoCSVWriter是什么——后者听起来与问题无关。 (但不,您不需要使用 XPath 来查询 XML。我个人只是直接使用 LINQ to XML。) -
根据您的 cmets,听起来您想从 XML(d:Guid、d:ProcessType 等)中检索多个节点并将它们写入 CSV。你现在的代码不起作用,你必须使用
ChoETL吗?如果不是@JonSkeet 是正确的,那么你最好使用 LINQ to XML,它有很多在线示例。
标签: c# validation xpath choetl