Mar*_*elo 1 .net c# xml xpath namespaces
我有以下XPATH行:
// DET [@ nItem域= "1"]/PROD/cProd
这成功地使用XPath Visualizer选择了所需的节点,它自动识别命名空间,并定义要选择的命名空间.
当我使用以下XPATH代码在C#中指定命名空间时:
"http://www.portalfiscal.inf.br/nfe//det[@nItem=\"1\"]/prod/cProd"
Run Code Online (Sandbox Code Playgroud)
它给了我一个XPathException:
System.Xml.dll中发生未处理的"System.Xml.XPath.XPathException"类型异常附加信息:' http : //www.portalfiscal.inf.br/nfe//det[@ nItem = "1"]/prod/cProd'的名字无效.
(正如你所看到的,它不是任何逃避角色或任何东西,因为它给了我在异常中试图达到的东西)
如果我知道XPath的命名空间,我该如何正确选择这个节点?
- [编辑] - 我尝试读取节点的完整行:
doc.XPathSelectElement("http://www.portalfiscal.inf.br/nfe//det[@nItem=\"1\"]/prod/cProd").Value;
Run Code Online (Sandbox Code Playgroud)
并且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>
Run Code Online (Sandbox Code Playgroud)
(不必要的东西不应该是一个问题,因为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);
.......
Run Code Online (Sandbox Code Playgroud)
沿着那条线的东西.您基本上必须创建某种XML命名空间,给它一个前缀,然后在XPath表达式中使用该前缀 - 而不是整个命名空间 - 只是前缀.
| 归档时间: |
|
| 查看次数: |
8085 次 |
| 最近记录: |