scala - 来自 xml 节点的 scala-xml 子方法获取尾随空格
问题描述
我实际上是在 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/>)
我的问题是,是否可以从预期的形式中正确读取它?
解决方案
问题是换行符/空格被视为文本节点。该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>
请注意,如果元素之间有实际的 Text 节点,则这与 .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”字符串从子列表中排除。
推荐阅读
- android - DisplayMetrics.DENSITY_DEVICE_STABLE 是否应与默认屏幕缩放时的 resources.displayMetrics.densityDpi 相同
- javascript - 在其他变量的函数中访问数据的变量 - 未定义
- wordpress - WooCommerce - 允许客户更改默认添加到卡的数量
- html - 为不同部分设置 rmarkdown 选项卡颜色
- sql - 指标为 Y 时全部计数
- sql - 通过选择每个组部分的最大值进行分组
- azure-devops - Azure DevOps 作业序列
- swift - 无法为 SELECT 命令绑定 sqlite 语句
- excel - 将文本框条目传递给单元格时,如果缺少所需信息,则发出警告
- wget - 如何强制 wget 使用 TLS1.2