java xml 节点路径,SelectSingleNode使用XPath为已知良好的xml节点路径返回null
回答(9)
2 years ago
我强烈怀疑问题与名称空间有关 . 尝试摆脱名称空间,你会没事的 - 但显然这对你的实际情况没有帮助,我认为这个文件是固定的 .
我不记得如何在XPath表达式中指定命名空间,但我确信这是问题所在 .
编辑:好的,我've remembered how to do it now. It'虽然不是很令人愉快 - 你需要为它创建一个 XmlNamespaceManager . 以下是一些适用于您的示例文档的示例代码:
using System;
using System.Xml;
public class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
XmlNamespaceManager namespaces = new XmlNamespaceManager(doc.NameTable);
namespaces.AddNamespace("ns", "urn:hl7-org:v3");
doc.Load("test.xml");
XmlNode idNode = doc.SelectSingleNode("/My_RootNode/ns:id", namespaces);
string msgID = idNode.Attributes["extension"].Value;
Console.WriteLine(msgID);
}
}
2 years ago
如果要完全忽略名称空间,可以使用:
static void Main(string[] args)
{
string xml =
"\n" +
" \n" +
" \n" +
"";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNode idNode = doc.SelectSingleNode("/*[local-name()='My_RootNode']/*[local-name()='id']");
}
2 years ago
这应该适用于你的情况而不删除命名空间:
XmlNode idNode = myXmlDoc.GetElementsByTagName("id")[0];
2 years ago
对不起,您忘记了命名空间 . 你需要:
XmlNamespaceManager ns = new XmlNamespaceManager(myXmlDoc.NameTable);
ns.AddNamespace("hl7","urn:hl7-org:v3");
XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/hl7:id", ns);
事实上,无论是在这里还是在Web服务中,从XPath操作或依赖于XPath的任何东西获取null通常都表明XML命名空间存在问题 .
2 years ago
嗯......我遇到了同样的问题而且很头疼 . 由于我不太关心命名空间或xml架构,我只是从我的xml中删除了这些数据,它解决了我所有的问题 . 可能不是最好的答案?可能,但如果您不想处理所有这些并且您只关心数据(并且不会将xml用于其他任务),删除命名空间可能会解决您的问题 .
XmlDocument vinDoc = new XmlDocument();
string vinInfo = "your xml string";
vinDoc.LoadXml(vinInfo);
vinDoc.InnerXml = vinDoc.InnerXml.Replace("xmlns=\"http://tempuri.org\/\", "");
2 years ago
只是为了解决命名空间问题,在我的情况下,我一直在运行具有多个命名空间的文档,并且需要正确处理命名空间 . 我编写了下面的函数来获取命名空间管理器来处理文档中的任何命名空间:
private XmlNamespaceManager GetNameSpaceManager(XmlDocument xDoc)
{
XmlNamespaceManager nsm = new XmlNamespaceManager(xDoc.NameTable);
XPathNavigator RootNode = xDoc.CreateNavigator();
RootNode.MoveToFollowing(XPathNodeType.Element);
IDictionary NameSpaces = RootNode.GetNamespacesInScope(XmlNamespaceScope.All);
foreach (KeyValuePair kvp in NameSpaces)
{
nsm.AddNamespace(kvp.Key, kvp.Value);
}
return nsm;
}
2 years ago
只需使用// id而不是/ id . 它在我的代码中工作正常
2 years ago
要记住的规则是:如果您的文档指定 namespace ,则必须在调用 SelectNodes() 或 SelectSingleNode() 时使用 XmlNamespaceManager . 这是好事 .
请参阅文章Advantages of namespaces . Jon Skeet在他的答案中做得很好,展示了如何使用 XmlNamespaceManager . (这个答案应该只是对答案的评论,但我没有足够的Rep Points来评论 . )
2 years ago
Roisgoen的回答对我有用,但为了使它更通用,你可以使用RegEx:
//Substitute "My_RootNode" for whatever your root node is
string strRegex = @"\s+xmlns([\s]|[^>])*)>";
var myMatch = new Regex(strRegex, RegexOptions.None).Match(myXmlDoc.InnerXml);
if (myMatch.Success)
{
var grp = myMatch.Groups["xmlns"];
if (grp.Success)
{
myXmlDoc.InnerXml = myXmlDoc.InnerXml.Replace(grp.Value, "");
}
}
我完全承认这不是一个最佳实践答案,但它是一个简单的解决方案,有时这就是我们所需要的 .
java xml 节点路径,SelectSingleNode使用XPath为已知良好的xml节点路径返回null相关推荐
- 树形结构数据, 已知某一子节点 ,一次向上获取所有父节点
树形结构数据, 已知某一子节点 ,一次向上获取所有父节点 //tree: 树形结构, menuid: 已知节点属性,(代码中判断id相等) function treeFindPath(tree, me ...
- js 树形结构数据 已知某一子节点 一次向上获取所有父节点
已知树形结构 res.现在有一个对象是{code: 1,name: "水上分局"},想向上依次获取取得父级,比如说水上分局 父节点是汉阳区 汉阳区父节点是武汉市 武汉市父节点是湖北 ...
- 1001: 植树问题 Java 某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且mn),请问每位同学平均可以植树几株?还有几株剩余?
1001: 植树问题 Java 题目描述 某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且m>n),请问每位同学平均可以植树几株?还有几株剩余? 输入 输入两个整数m和n,分别 ...
- 【CTF reverse Java逆向】JEB3.19逆向方案(已知2022.02.14可用)
声明:仅供Java逆向学习参考! 解决方案 下载参考链接1提供的JEB.在power shell运行.\jeb_wincon.bat启动JEB. 进入界面后,如果让你提供license key,就运行 ...
- android 删除路径文件内容,Android 删除已知路径的文件或文件夹
转载:https://blog.csdn.net/qq_31939617/article/details/89414714 [功能] delete(String delFile):删除文件或文件夹 d ...
- 已知图片在服务器的路径,下载到本地
def download_picture(picture_path,request_to_register):host_ip = '' username = ''password = ''files1 ...
- C语言已排序链表插入新节点保持排序状态(附完整源码)
C语言已排序链表插入新节点保持排序状态 C语言已排序链表插入新节点保持排序状态完整源码(定义,实现,main函数测试) C语言已排序链表插入新节点保持排序状态完整源码(定义,实现,main函数测试) ...
- XDocument读取xml的所有元素以及XPath语法
XDocument读取xml的所有元素以及XPath语法 原文 http://www.cnblogs.com/xxyishutong/p/3326375.html <?xml version= ...
- XML DOM摘要五(XPath)
XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointe ...
最新文章
- 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说
- SpringMVC 全局异常处理,返回json
- 基于Vue实现关键词实时搜索高亮显示关键词
- 命令+mybatis-generator插件自己主动生成Mapper映射文件
- java8 lambda表达式Stream对List常用操作总结
- jenkins无法连接仓库:Command “/usr/bin/git ls-remote -h -- https://gitee.com/xxx.git HEAD“ returned
- 使用python爬取文库文档
- 与老师连这得计算机如何上网,观潮的老师教案
- java servlet mysql_servlet+mysql实现简易的登录功能
- kaggle房价预测代码
- 什么是 AI(人工智能(Artificial Intelligence)
- 杭电OJ第11页2075~2079算法题(C语言)
- 【人工智能】人工智能学习常用社区
- CreateDialog和DialogBox
- 当try_files遇上gateway是如何产生火花的
- 上海亚商投顾:沪指震荡上行 大消费板块全线走强
- Windows Server 2012 R2 部署JavaWeb项目之环境、软件、配置
- 【模拟IC】电荷泵基础1(On-chip High-Voltage Generator Design)
- 淡盐水洗脸有什么用处
- Altium Designer(二)电阻、电容 模型的创建
热门文章
- 空战决策知识构建方法研究
- 题解 【国家集训队2011】数颜色
- ASP.NET MVC中在 @RenderBody() 或者 @Html.Partial()中需要使用引入外部js,css
- 【计算机网络复习 数据链路层】3.6.2 以太网
- leaf 叶子(张量)
- 第一章 计算机网络 5 分层结构/协议/接口/服务的概念 [计算机网络笔记]
- 计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配
- git 生成ssh key_ubuntu git生成ssh key (公钥私钥)配置github或者码云
- linux运行好麻烦,解析用Linux非常困难、必须用命令行、很老又丑陋及无法运行游戏...
- matlab实现脑电信号的相位同步分析,视听刺激脑电信号的相位同步分析