我有这个非常简单的 XML
<Customer>
<BirthDate>1958-05-31 00:00:00</BirthDate>
</Customer>
我想提取没有小时部分的 BirthDate。
编辑:它必须在 XPath 语句中完成,而不是在客户端代码中。
我在这个网站上测试了这个 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)' 具有无效标记。
Wellllllll ..... 我该怎么办?