gpt4 book ai didi

c# - Java XML XPath 解析器到 C#

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:58 24 4
gpt4 key购买 nike

我目前正在将 Java 编写的 XML 解析器移植到 C#。 Java 解析器是我几个月前编写的(尽管现在基本上被放弃了,因为我们的项目转向了 C#),它通过 URL 解析 XML 数据,特别是 this (带有自定义纬度/经度/时间参数)。

对于 Java 解析器,我选择了 XPath,因为数据有点......困惑。因此,我所做的就是定义我的自定义路径,而不是迭代和保存每个项目。

我在移植时遇到一些问题的 Java 代码片段是:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(someURLToXML.openStream());

XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();

XPathExpression hourly = xpath.compile("/dwml/data/time-layout[3]/start-valid-time/text()");
XPathExpression tempHourly = xpath.compile("/dwml/data/parameters/temperature[@type='hourly']/value/text()");

NodeList hourlyResult = (NodeList) hourly.evaluate(doc,XPathConstants.NODESET);
NodeList tempHourlyResult = (NodeList) tempHourly.evaluate(doc,XPathConstants.NODESET);

阅读一些有关 C# XPath 脚本的教程,我发现了这个 site 。另外,通过 Google 搜索,这似乎是在 C# 上执行 XPath 的实际方法。

到目前为止,我的 C# 框架中有这个:

XmlTextReader reader = new XmlTextReader(URL);

XPathDocument doc = new XPathDocument(reader);
XPathNavigator nav = doc.CreateNavigator();

XPathExpression expr;
expr = nav.Compile("/dwml/data/");
XPathNodeIterator iterator = nav.Select(expr);

while (iterator.MoveNext())
{
// do something
}

我所做的是确定了 expr 处的默认表达式,但之后,我不太确定如何将上述 XPaths 从 Java 脚本移植到 While 循环内,或者即使我需要它,因为我的原始脚本根本没有使用任何循环,因为不需要对 XML 遍历进行硬编码。

我的问题是,如何移植这四行:

XPathExpression hourly = xpath.compile("/dwml/data/time-layout[3]/start-valid-time/text()");
XPathExpression tempHourly = xpath.compile("/dwml/data/parameters/temperature[@type='hourly']/value/text()");

NodeList hourlyResult = (NodeList) hourly.evaluate(doc,XPathConstants.NODESET);
NodeList tempHourlyResult = (NodeList) tempHourly.evaluate(doc,XPathConstants.NODESET);

到 C#?

编辑:

试试这个:

XmlTextReader reader = new XmlTextReader(URL);

XPathDocument doc = new XPathDocument(reader);
XPathNavigator nav = doc.CreateNavigator();

foreach(XPathNavigator node in (XPathNodeIterator) nav.Evaluate("/dwml/data/time-layout[3]/start-valid-time/text()"))
{
hourly.Add(node.Value);
}

最佳答案

下面的代码允许我保留 XPath 规则并仍然执行我想要的操作,从好的方面来说,它将值添加到字符串列表中 - 很好!

XmlTextReader reader = new XmlTextReader(URL);

XPathDocument doc = new XPathDocument(reader);
XPathNavigator nav = doc.CreateNavigator();

List<string> hourly = new List<string>();

foreach(XPathNavigator node in (XPathNodeIterator) nav.Evaluate("/dwml/data/time-layout[3]/start-valid-time/text()"))
{
hourly.Add(node.Value);
}

关于c# - Java XML XPath 解析器到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com