gpt4 book ai didi

c# - 在 C# 中使用 "complex"XPath

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:03 25 4
gpt4 key购买 nike

我有这个非常简单的 XML

<Customer>
<BirthDate>1958-05-31 00:00:00</BirthDate>
</Customer>

我想提取没有小时部分的 BirthDate。

编辑:它必须在 XPath 语句中完成,而不是在客户端代码中。

我用这个 website 测试了这个 XPath :

/Customer/BirthDate/substring(text(), 1, 10)

我还测试了这个 XPath:

/Customer/BirthDate/substring(., 1, 10)

该网站给了我预期的结果。但是我的 C# 程序给我一个运行时错误。

测试程序如下:

var content = @"<Customer><BirthDate>1958-05-31 00:00:00</BirthDate></Customer>";

using (var memStream = new MemoryStream(Encoding.Default.GetBytes(content)))
{
var doc = new XPathDocument(memStream);
var navigator = doc.CreateNavigator();

/// GET THE "RAW" VALUE. WORKING
var expr = navigator.Compile("/Customer/BirthDate");
var iter = navigator.Select(expr);
Console.WriteLine("BirthDate: {0}", iter.Current.Value);

/// GET THE "TRANSFORMED" VALUE. NOT WORKING
var expr2 = navigator.Compile("/Customer/BirthDate/substring(text(), 1, 8)");
var iter2 = navigator.Select(expr2);
Console.WriteLine("BirthDate: {0}", iter2.Current.Value);

Console.ReadKey();
}

这是一个没有任何内部异常的 XPathException 消息:

'/Customer/BirthDate/substring(text(), 1, 10)' has an invalid token.

Wellllllll.....我该怎么办?

最佳答案

EDIT: It must be done in XPath statement, not in client code.

.net 对 XPath 的内置支持仅支持 XPath 1.0。 XPath 1.0 不支持定位步骤中的函数,因此您必须使用支持 XPath 2.0 的 .net 第三方库,例如 XmlPrime , Saxxon , 或 Query Machine .

关于c# - 在 C# 中使用 "complex"XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069551/

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