我实际上是在处理windows,我必须从一个文件中解析xml。
问题是当我解析根元素,并通过child方法获取子元素时,我得到的是空子元素。
XML.load("my_path\\sof.xml").child
res0: Seq[scala.xml.Node] = List(
, <b/>,
)这是我的xml文件
sof.xml
<a>
<b></b>
</a>但是,当我删除文件的每一个\n和\r时,如下所示:
sof.xml
<a><b></b></a>我得到了预期的结果
res0: Seq[scala.xml.Node] = List(<b/>)我的问题是,是否有一个选项可以正确地从预期的形式读取它?
发布于 2018-10-25 12:30:32
问题是换行符/空格被视为文本节点。scala.xml.Utility.trim(x: Node)方法将删除不必要的空白:
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方法不同,例如:
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“字符串。
发布于 2018-10-25 12:04:26
我在Mac上查过这个:
XML.loadString("""<a>
| <b></b>
|</a>""").child这导致了同样的行为--我也不明白。
但是,这可以在您的代码中解决这个问题:
XML.loadString("""<a>
| <b></b>
|</a>""").child
.collect{ case e: Elem=> e}这将消除xml.Text。
https://stackoverflow.com/questions/52984363
复制相似问题