gpt4 book ai didi

c# - 使用 XPATH 在带有命名空间的 XML 中选择节点的问题

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

我有以下 XPATH 行:

//det[@nItem="1"]/prod/cProd

使用 XPath Visualizer 成功选择了所需的节点,它会自动识别命名空间,您可以定义要选择的命名空间。

当我使用以下 XPATH 代码在 C# 中指定命名空间时:

"http://www.portalfiscal.inf.br/nfe//det[@nItem=\"1\"]/prod/cProd"

它给了我一个 XPathException:

An unhandled exception of type 'System.Xml.XPath.XPathException' occurred in System.Xml.dll Additional information: 'http://www.portalfiscal.inf.br/nfe//det[@nItem="1"]/prod/cProd' has an invalid qualified name.

(如您所见,它不是任何转义字符或任何东西,因为它给了我我在异常中试图达到的目标)

如果我知道带有 XPath 的命名空间,我该如何正确选择该节点?

--[编辑]--我尝试读取节点的完整行:

doc.XPathSelectElement("http://www.portalfiscal.inf.br/nfe//det[@nItem=\"1\"]/prod/cProd").Value;

删除了不必要的 XML:

<?xml version="1.0" encoding="utf-8"?>
<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.10">
<idLote>1</idLote>
<NFe>
<infNFe versao="1.10" Id="NFe31100118583682000178550010000077778397333128">
<det nItem="1">
<prod>
<cProd>111</cProd>
</prod>
</det>
</infNFe>
</NFe>
</enviNFe>

(去掉不必要的东西应该不是问题,因为 XPath Visualizer 给我带来了完全没有问题的节点)

最佳答案

由于您既没有向我们展示 XML 文档,也没有向我们展示您拥有的 C# 代码,我只能猜测您在做什么....

好的,看来您正在使用 Linq-to-XML,那么请在此处使用此代码片段:

// Create and load XML reader
XmlReader reader = XmlReader.Create(new FileStream(@"D.\test.xml", FileAccess.Read));

// get the root element
XElement root = XElement.Load(reader);


// create instance of XML namespace manager
XmlNamespaceManager nsmgr = new XmlNamespaceManager(reader.NameTable);

// add your namespace to the manager and give it a prefix
nsmgr.AddNamespace("ns", "http://www.portalfiscal.inf.br/nfe");

XElement node = root.XPathSelectElement("//ns:det[@nItem="1"]/ns:prod/ns:cProd", nsmgr);
.......

类似的东西。您基本上必须创建某种类型的 XML namespace ,给它一个前缀,然后在您的 XPath 表达式中使用该前缀 - 而不是整个 namespace - 只是前缀。

关于c# - 使用 XPATH 在带有命名空间的 XML 中选择节点的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2607543/

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