xml - Scala:XML 解析命名空间属性

标签 xml scala

在下面的示例中,一旦属性“id”具有命名空间前缀,我该如何访问它?

scala> val ns = <foo id="bar"></foo>    
ns: scala.xml.Elem = <foo id="bar"></foo>

scala> ns \ "@id"                   
res15: scala.xml.NodeSeq = bar

以上工作正常。根据下面的文档应该可以,但实际上没有。

scala> val ns = <foo xsi:id="bar"></foo>
ns: scala.xml.Elem = <foo xsi:id="bar"></foo>

scala> ns \ "@{xsi}id"                   
res16: scala.xml.NodeSeq = NodeSeq()

全部在 Scala 2.8.0.final 上

干杯

答案: 似乎在 xml 中没有 xlmns 就无法访问该属性。因此,要使上面的示例正常工作,它需要位于 xlm namespace 内。例如:

scala> val xml = <parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <foo xsi:id="bar"></foo></parent>
xml: scala.xml.Elem = <parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <foo xsi:id="bar"></foo></parent>

scala> xml \ "foo" \ "@{http://www.w3.org/2001/XMLSchema-instance}id"
res3: scala.xml.NodeSeq = bar

最佳答案

看看这篇文章:Accessing XML attributes with namespaces .

它看起来像在中引用的 uri:

ns \ "@{uri}foo"

指的是等号之后的部分。这有效:

scala> val ns = <foo xmlns:id="bar" id:hi="fooMe"></foo>
ns: scala.xml.Elem = <foo id:hi="fooMe" xmlns:id="bar"></foo>

scala> ns \ "@{bar}hi"
res9: scala.xml.NodeSeq = fooMe

所以我认为foo之后的第一件事就是定义你的URL和命名空间,然后定义属性,所以如果你想获得属性“bar”,可能是这样的:

scala> val ns = <foo xmlns:myNameSpace="id" myNameSpace:id="bar"></foo>
ns: scala.xml.Elem = <foo myNameSpace:id="bar" xmlns:myNameSpace="id"></foo>

scala> ns \ "@{id}id"
res10: scala.xml.NodeSeq = bar

虽然我不确定将 URI 重用为属性名称是否正确。

关于xml - Scala:XML 解析命名空间属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079381/

相关文章:

java - 从 getActionProvider() 设置 ShareActionProvider 时如何解决 Null 问题?

scala - 提升请求对象

scala - 可序列化和 AnyVal

xml - 当子节点满足一定条件时移除 XML 节点

xml - 在Perl中读取带有巨大文本节点的xml的实用方法

c# - XmlDocument.CreateDocumentType 方法超时

scala - 我如何告诉 ScalaTest 运行一个用 DoNotDiscover 注释的类?

xml - 如何使用 SWI-Prolog 从 OWL RDF/XML 查询个体的对象属性?

scala - 使用 Slick 提升嵌入时,如何将提升类型改回 Scala 类型?

scala - SBT 提示弃用