处理Visio XML时,如何用XPath访问带命名空间的属性?
解决带命名空间的XML属性访问问题
问题根源
你存在两个关键错误:
- 命名空间URL不匹配:XML中
r前缀对应的命名空间是http://schemas.openxmlformats.org/officeDocument/2006/relationships,但你在XmlNamespaceManager中给xRel前缀配置了错误的URL(http://schemas.openxmlformats.org/package/2006/relationships)。 - 属性值大小写错误:XML中属性值是
rId1,但你的XPath里写的是rid1,XPath对大小写敏感。
修正步骤
- 修正命名空间配置:
XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable()); nsm.AddNamespace("xVis", "http://schemas.microsoft.com/office/visio/2012/main"); // 替换为XML中r前缀对应的正确命名空间URL nsm.AddNamespace("xRel", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
- 修正XPath表达式:
// 注意属性值是rId1(大小写正确),属性使用xRel前缀 XPathSelectElement(".//xVis:Page/xVis:Rel[@xRel:id='rId1']", nsm);
额外说明
- XML元素和属性的命名空间必须严格匹配URL,前缀可以自定义(比如用xRel代替r没问题),但URL不能出错。
- XPath对元素名、属性名、属性值的大小写都敏感,必须和XML内容完全一致。
内容的提问来源于stack exchange,提问作者user3785768
相关产品推荐
相关产品推荐

