Scala如何检索具有可选属性的xml标记
我正在尝试获取带有属性的scala xml节点标记。我只想得到带有属性的标记名,而不是子元素 我有以下意见:Scala如何检索具有可选属性的xml标记,xml,scala,scala-xml,Xml,Scala,Scala Xml,我正在尝试获取带有属性的scala xml节点标记。我只想得到带有属性的标记名,而不是子元素 我有以下意见: <substance-classes> <nucleic-acid-sequence display-name="Nucleic Acid Sequence"> <nucleic-acid-base> <base-symbol>a</base-symbol>
<substance-classes>
<nucleic-acid-sequence display-name="Nucleic Acid Sequence">
<nucleic-acid-base>
<base-symbol>a</base-symbol>
<count>295</count>
</nucleic-acid-base>
<nucleic-acid-base>
<base-symbol>c</base-symbol>
<count>329</count>
</nucleic-acid-base>
<nucleic-acid-base>
<base-symbol>g</base-symbol>
<count>334</count>
</nucleic-acid-base>
<nucleic-acid-base>
<base-symbol>t</base-symbol>
<count>268</count>
</nucleic-acid-base>
</nucleic-acid-sequence>
<genbank-information>
<genbank-accession-number>EU186063</genbank-accession-number>
</genbank-information>
</substance-classes>
A.
295
C
329
G
334
T
268
EU186063
我试图通过这样做来替换
的内容
val newNucleicAcidSequenceNode = <nucleic-acid-sequence>{ myfunction
} </nucleic-acid-sequence>
val newNucleicAcidSequenceNode={myfunction
}
但是一些
具有类似
的属性。自从我
newNucleicAcidSequenceNode
是一个硬编码标记,我正在丢失属性
如何保留可选属性并将{myfunction}
传递给
标签?所以,如果我很了解你:
- 您只想替换xml的一部分
- 这部分是
物质类别下任何
核酸序列的子序列
- 您不希望丢失上述核酸序列的任何属性
- 通过函数(
)更改上述子项myFunction
import scala.xml.{Node, Elem}
val myXml: Elem =
<substance-classes>
<nucleic-acid-sequence display-name="Nucleic Acid Sequence">
<nucleic-acid-base>
<base-symbol>a</base-symbol>
<count>295</count>
</nucleic-acid-base>
<nucleic-acid-base>
<base-symbol>c</base-symbol>
<count>329</count>
</nucleic-acid-base>
<nucleic-acid-base>
<base-symbol>g</base-symbol>
<count>334</count>
</nucleic-acid-base>
<nucleic-acid-base>
<base-symbol>t</base-symbol>
<count>268</count>
</nucleic-acid-base>
</nucleic-acid-sequence>
<genbank-information>
<genbank-accession-number>EU186063</genbank-accession-number>
</genbank-information>
</substance-classes>
def myFunction(children: Seq[Node]) : Seq[Node] = ??? // whatever you want it to be
// Here's the replacement:
myXml.copy(child = myXml.child.map {
case e@Elem(_, "nucleic-acid-sequence", _, _, children@_*) =>
e.asInstanceOf[Elem].copy(child = myFunction(children))
case other => other
})
在这种情况下,如果您将第一个代码段中未实现的myFunction
替换为以下内容:
<substance-classes>
<nucleic-acid-sequence display-name="Nucleic Acid Sequence"><nucleic-acid-base>
<base-symbol>c</base-symbol>
<count>329</count>
</nucleic-acid-base><nucleic-acid-base>
<base-symbol>g</base-symbol>
<count>334</count>
</nucleic-acid-base></nucleic-acid-sequence>
<genbank-information>
<genbank-accession-number>EU186063</genbank-accession-number>
</genbank-information>
</substance-classes>
C
329
G
334
EU186063
正如您所见,核酸序列的属性没有丢失,并且您的函数在定义的条件下保持了四个以上的两个节点
希望能有帮助
<substance-classes>
<nucleic-acid-sequence display-name="Nucleic Acid Sequence"><nucleic-acid-base>
<base-symbol>c</base-symbol>
<count>329</count>
</nucleic-acid-base><nucleic-acid-base>
<base-symbol>g</base-symbol>
<count>334</count>
</nucleic-acid-base></nucleic-acid-sequence>
<genbank-information>
<genbank-accession-number>EU186063</genbank-accession-number>
</genbank-information>
</substance-classes>