首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xml节点中的scala-xml子方法将获得尾随空格。

xml节点中的scala-xml子方法将获得尾随空格。
EN

Stack Overflow用户
提问于 2018-10-25 08:08:56
回答 2查看 239关注 0票数 1

我实际上是在处理windows,我必须从一个文件中解析xml。

问题是当我解析根元素,并通过child方法获取子元素时,我得到的是空子元素。

代码语言:javascript
复制
XML.load("my_path\\sof.xml").child

res0: Seq[scala.xml.Node] = List(
    , <b/>, 
)

这是我的xml文件

代码语言:javascript
复制
sof.xml
<a>
    <b></b>
</a>

但是,当我删除文件的每一个\n和\r时,如下所示:

代码语言:javascript
复制
sof.xml
<a><b></b></a>

我得到了预期的结果

代码语言:javascript
复制
res0: Seq[scala.xml.Node] = List(<b/>)

我的问题是,是否有一个选项可以正确地从预期的形式读取它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-25 12:30:32

问题是换行符/空格被视为文本节点。scala.xml.Utility.trim(x: Node)方法将删除不必要的空白:

代码语言:javascript
复制
scala> val a = XML.loadString("""<a>
     |     <b></b>
     | </a>""")
a: scala.xml.Elem =
<a>
    <b/>
</a>

scala> scala.xml.Utility.trim(a)
res0: scala.xml.Node = <a><b/></a>

注意,如果在元素之间有实际的文本节点,则这与.collect方法不同,例如:

代码语言:javascript
复制
scala> val a = XML.loadString("""<a>
     |    <b>Test </b>   Foo    
     |    </a>""")
a: scala.xml.Elem =
<a>
   <b>Test </b>   Foo
</a>

scala> scala.xml.Utility.trim(a).child
res0: Seq[scala.xml.Node] = List(<b>Test</b>, Test)

scala> a.child.collect { case e: scala.xml.Elem => e }
res1: Seq[scala.xml.Elem] = List(<b>Test </b>)

使用.collect方法,从子列表中排除"Foo“字符串。

票数 2
EN

Stack Overflow用户

发布于 2018-10-25 12:04:26

我在Mac上查过这个:

代码语言:javascript
复制
XML.loadString("""<a>
                   |    <b></b>
                   |</a>""").child

这导致了同样的行为--我也不明白。

但是,这可以在您的代码中解决这个问题:

代码语言:javascript
复制
XML.loadString("""<a>
                   |    <b></b>
                   |</a>""").child
  .collect{ case e: Elem=> e}

这将消除xml.Text

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52984363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档