java - 如何通过解析 xml 创建一个集合,其中每个 child 都有他的 parent

标签 java xml scala javax

我使用 javax xml 来解析 XML,我想要的是在所有子项中包含父项。

<a>
   <b value1 = "b1", value2 = "b2">
       <c value1 = "c1", value2 = "c2" />
       <c value1 = "c3", value2 = "c4" />
   </b>
   <b value1 = "b3">
       <c value1="c5" />
       <c value1 ="c6" />
   </b>
</a>

我希望结果的形式如下:

Set((b1,c1,c2), (b1,c3,c4), (b3, c5, ""), (b3, c6, "")) 

最佳答案

以下是我如何在 Scala 中使用 XML 文字来实现这一目标。这不是最有效的方法,但它实现了您指定的目标:

scala> val xml: scala.xml.Elem = <a>
  <b value1="b1" value2="b2">
    <c value1="c1" value2="c2"/>
    <c value1="c3" value2="c4"/>
  </b>
  <b value1="b3">
    <c value1="c5"/>
    <c value1="c6"/>
  </b>
</a>

scala> val bs = xml\ "b"
bs: scala.xml.NodeSeq = <b value1="b1" value2="b2">
    <c value1="c1" value2="c2"/>
    <c value1="c3" value2="c4"/>
  </b><b value1="b3">
    <c value1="c5"/>
    <c value1="c6"/>
  </b>

scala> val gatheringNodes = bs.map { b =>
  val cs = b\"c"
  b\"@value1" -> cs.map(c => (c\"@value1", c\"@value2"))
}
gatheringNodes: scala.collection.immutable.Seq[(scala.xml.NodeSeq, scala.collection.immutable.Seq[(scala.xml.NodeSeq, scala.xml.NodeSeq)])] = List((b1,List((c1,c2), (c3,c4))), (b3,List((c5,), (c6,))))

scala> val finalOutput = gatheringNodes.flatMap { case(b, cs) =>
    cs.map { case(c1, c2) => (b, c1, c2)}
}.toSet
finalOutput: scala.collection.immutable.Set[(scala.xml.NodeSeq, scala.xml.NodeSeq, scala.xml.NodeSeq)] = Set((b1,c1,c2), (b1,c3,c4), (b3,c5,), (b3,c6,))

关于java - 如何通过解析 xml 创建一个集合,其中每个 child 都有他的 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856528/

相关文章:

java - 在 try-finally block 中嵌入方法的现有代码 (2)

java - Android Studio 无法为文件创建 MD5 哈希值

javascript - 如何使用 jQuery 'find' 避免在带有命名空间的 xml 中使用相同标记的多个节点?

java - ListView 中的布局问题

scala - 如何将此理解转化为 flatMap 实现

scala - 在 Scala 中重现 Java OpenGL ES 2.0 演示时出现奇怪的 NullPointerException

java - 如何从 String 创建 HtmlUnit HTMLPage 对象?

java - 字符数冲突

java - 解析 xml 时出错 : unbound prefix from com. google.android.gms.ads.AdView

scala - 通过Spark写入HBase : Task not serializable