- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不想再问 XPath/XmlNamespaceManager 问题,但我似乎无法弄明白。
我使用了 XpathVisualizer 工具,它可以使用 XPath“//FuelGradeMovement”正确检测节点。它识别 namespace 并像那样评估 XPath。
我只想检查节点“FuelGradeMovement”是否存在。很容易。但不,行不通。
很明显,我正在 xpath 的节点甚至没有前缀,但如果我不使用 namespace 管理器,我会收到运行时错误,因为文档中的其他节点确实有前缀。
并且对于命名空间,由于某种原因它只是看不到节点。
我正在尝试解析此文档:
<?xml version="1.0"?>
<NAXML-MovementReport version="3.4" xmlns="http://www.naxml.org/POSBO/Vocabulary/2003-10-16" xmlns:radiant="http://www.radiantsystems.com/NAXML-Extension" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.naxml.org/POSBO/Vocabulary/2003-10-16 NAXML-PBI34RadiantExtended.xsd">
<TransmissionHeader>....
</TransmissionHeader>
<FuelGradeMovement/>
</NAXML-MovementReport>
使用此代码:
using ( var fs = file.OpenRead() )
{
var x = new XPathDocument( fs );
var nav = x.CreateNavigator();
var mgr = new XmlNamespaceManager( nav.NameTable );
mgr.AddNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
mgr.AddNamespace( "xmime", "http://www.w3.org/2005/05/xmlmime" );
mgr.AddNamespace( "radiant", "http://www.radiantsystems.com/NAXML-Extension" );
mgr.AddNamespace( "ns1", "http://www.naxml.org/POSBO/Vocabulary/2003-10-16" );
var iterator = nav.Select( "//FuelGradeMovement", mgr );
return iterator.Count > 0;
}
我尝试了很多组合,但我没有发现我的错误。谁能帮忙?
谢谢!
最佳答案
您正在指定 namespace 管理器 - 但不是 namespace 。 FuelGradeMovement
元素从其父级继承了 "http://www.naxml.org/POSBO/Vocabulary/2003-10-16"
命名空间 URI,所以我相信你想要:
var iterator = nav.Select("//ns1:FuelGradeMovement", mgr);
元素没有指定命名空间前缀并不意味着它不在命名空间中。
请注意,除非您真的需要复杂的 XPath 查询,否则 LINQ to XML 会使所有这些变得简单得多。例如:
var doc = XDocument.Load(fs);
XNamespace ns = "http://www.naxml.org/POSBO/Vocabulary/2003-10-16";
return doc.Descendants(ns + "FuelGradeMovement").Any();
关于c# - 尽管有 XmlNamespaceManager,XPathNavigator 还是找不到节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565364/
对于为什么(至少在 .Net Framework 中),我已经有点干巴巴地想出了为什么有必要使用 XmlNamespaceManager 。为了在执行 XPath 查询时处理 namespace (或
我不想再问 XPath/XmlNamespaceManager 问题,但我似乎无法弄明白。 我使用了 XpathVisualizer 工具,它可以使用 XPath“//FuelGradeMovemen
因此,当我使用 selectSingleNode 获取空值时,我发现我需要声明一个 namespace ,因为我正在使用 xmlns 属性。我的问题是,如果我不在 xml 文件本身中使用前缀,为什么在
我正在尝试使用 XmlNamespaceManager 将 namespace 添加到 XmlDocument。这是当前的 xml: 我希望它转换为这个 xml(
我正在尝试从 XML File 中读取数据.在此元素中,前缀为“app”和“gml”文本。由于这些前缀,我无法读取数据。为此,我试图通过使用 XMLNamespaceManager 但没有获取来添加命
多年来,我一直在寻找一种方法来从具有多个命名空间的 XmlNode(不是 XmlDocument)中选择节点。 几乎我搜索过的每篇帖子都建议我使用 XmlNamespaceManager,但是,Xml
我有一些在 sharepoint 上运行的 C# 代码,我用它来检查 infopath 文档的 xml 内部,看看我是否应该检查文档或丢弃文档。 代码在我创建的几个不同的表单模板上运行良好,但在我最新
我有一些带有默认命名空间的 xml 并想统计 的数量 我该如何定义 XmlNamespaceManager nsmgr = ???? Assert.AreEqual(2, doc.SelectNo
我正在尝试测试如下所示的 XML 文档(在本例中为 SAML):
我正在尝试阅读以下内容并在其中选择一个节点 . XmlDocument document = new XmlDocument(); document.Load(Ser
我正在将一个旧的 .dll 重写到 net.core (1.1.1) 中,其中一种方法创建了一个 XmlDocument 并通过 XmlNamespaceManager 定义了命名空间: var ns
我是一名优秀的程序员,十分优秀!