【问题标题】:XML not well formed - Xpath requestXML 格式不正确 - Xpath 请求
【发布时间】:2015-04-24 08:11:49
【问题描述】:

我遇到了 XPath 请求问题。

<mainNode id="id35" soapenc:root="0">
    <node1 xsi:type="soapenc:string">response1</node1>
    <node2 xsi:type="soapenc:string"/>
    <node3 xsi:type="soapenc:string">response2</node3>
    <node4 xsi:type="soapenc:string">response3</node4>
    <node5 href="#id156"/>
</mainNode>

我的 XPath 请求:

/mainNode/node1/text()

结果:

错误 - 似乎 XML 格式不正确:与元素类型“mainNode”关联的属性“soapenc:root”的前缀“soapenc”未绑定。

有什么想法吗?

PS : 我从 SOAP WebService 获得这个 XML 文件

【问题讨论】:

  • 示例 XML 是完整文件吗?似乎没有声明 soapenc 命名空间 -- 你应该在其中找到 xmlns:soapenc="http://some.url/something
  • 我想你也可以看看stackoverflow.com/questions/8745798/…

标签: xml xpath


【解决方案1】:

很高兴看到完整的示例 XML,但听起来您的问题与命名空间管理有关。您也没有指定您使用的是哪种语言,但您是否见过XML namespaces and XPath。下面是来自@harpo 的回答,它显示了如果您真的不关心它们,如何从 XML 文档中去除名称空间。

"如果您确实需要对将使用 未知的命名空间,你真的不关心它,你需要 将其剥离并重新加载文档。 XPath 不能在 命名空间不可知的方式,除非你想使用 local-name() 在选择器中的每个点都起作用。”

private XmlDocument StripNamespace(XmlDocument doc)
{
    if (doc.DocumentElement.NamespaceURI.Length > 0)
    {
        doc.DocumentElement.SetAttribute("xmlns", "");
        // must serialize and reload for this to take effect
        XmlDocument newDoc = new XmlDocument();
        newDoc.LoadXml(doc.OuterXml);
        return newDoc;
    }
    else
    {
        return doc;
    }
}

【讨论】:

  • 你为什么复制别人的答案而不是引用他们或关闭问题作为重复?此外,我们不知道 OP 使用什么编程语言,这段 C# 摘录在这里可能完全没用。
  • @MathiasMüller 我链接到原始问题和答案,归功于 Harpo 的原始答案。引用重复的原因是为了确保未来的读者在原件从 SO 中删除的情况下受益。如果您阅读常见问题解答,我认为您会发现这是一个很好的做法。正如我在回答中所说,OP 没有明确他的编程选择。
  • 我确实阅读了很多关于应该作为单独答案发布的内容,而您的帖子当然不符合作为答案的条件。如果您担心与从 Stackoverflow 中删除相关的问题,为什么要删除一个高度赞成的答案,而不是这里的这个?也就是说,出于您给出的原因,来自 elsewhere 的内容确实应该包含在 SO 答案中。如何扩展您的帖子以使其本身成为答案?
猜你喜欢
  • 2012-08-22
  • 2016-07-24
  • 1970-01-01
  • 2017-04-13
  • 2013-01-04
  • 1970-01-01
  • 2012-03-20
  • 2019-04-29
  • 2020-09-24
相关资源
最近更新 更多