【问题标题】:Parsing XML with elements containing colon / namespace使用包含冒号/命名空间的元素解析 XML
【发布时间】:2010-11-27 20:59:09
【问题描述】:

在 Google Apps Script 中使用 Xml 解析 XML 文档: http://code.google.com/googleapps/appsscript/articles/XML_tutorial.html#HowItWorks

但是如果元素名称中有冒号,这不起作用(解析失败)。 尽管它可能是名称空间,但它是整个 XML 文档中的一个名称空间。

<aws:elementname>...</aws:elementname>

这只是 google 的 Xml 的问题还是通用的?

【问题讨论】:

  • 从文档中我收集到它是命名空间感知的。问题是什么 - XML 是否允许在命名空间之外的元素名称中使用冒号?
  • 如果 google 的 Xml 类是命名空间感知的,那么它不应该解析失败。我采用了相同的示例“培根的 Oracle”并添加(添加到每个元素) aws: 到所有元素,但它失败了。
  • 添加 aws 时:是否也为其添加了命名空间声明?
  • 这个 XML 实际上是亚马逊的 AWIS,它以:alexa.amazonaws.com/doc/2005-10-05/"><aws:Response xmlns:aws="awis.amazonaws.com/doc/…>

标签: xml google-apps-script xml-namespaces


【解决方案1】:

只是不要发送参数为真。

var oXML = Xml.parse(sXML, false);
var root = oXML.getElement();
var topElement = root.getElements("http://namespace-uri","topElement");
var childElement = topElement[0].getElements("http://namespace-uri","childElement");

【讨论】:

    【解决方案2】:

    这绝对不是一般问题。当然有处理命名空间的 XML 解析器。

    我怀疑这是教程代码的限制,谷歌库实际上可以处理命名空间,但查看 API 文档有点猜测。

    教程代码使用了类似的调用

    var movies = doc.html.head.getElements("movie");
    

    这似乎是一个不支持命名空间的版本。

    此方法有一个重载,它也采用命名空间 URL,如果涉及命名空间,您可能需要使用它。

    【讨论】:

    • “此方法有一个重载,它也采用命名空间 URL,如果涉及命名空间,您可能需要使用它” - 这在解析级别失败。 var oXML = Xml.parse(content);
    【解决方案3】:

    如果你想使用某个命名空间,你必须先声明它。例如:

    <root xmlns:aws="some-uri">
      <aws:elementname />
    </root>
    

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 2014-06-04
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多