如何在Java中解析混合节点和文本的XML?
我有一个xml格式-如何在Java中解析混合节点和文本的XML?,java,xml,xpath,xml-parsing,Java,Xml,Xpath,Xml Parsing,我有一个xml格式- <root> <sentence> first part of the text <a id="interpolation_1"> </a> second part of the text <a id="interpolation_2"> </a> </sentence>
<root>
<sentence>
first part of the text
<a id="interpolation_1"> </a>
second part of the text
<a id="interpolation_2"> </a>
</sentence>
</root>
正文第一部分
正文第二部分
本质上,
标记表示一个句子,子标记
是句子中插入的部分
XPath表达式String语句=XPath.evaluate(“句子”,transUnitElement)
将文本作为-文本的第一部分和第二部分给出,即忽略插值
XPath表达式-
NodeList aList=(NodeList)xPath.evaluate(“/句子/a”,transUnitElement,XPathConstants.NODESET)
提供
元素的列表
如何解析它们以获得
元素以及
元素的文本,而不丢失
元素的顺序和位置
预期产出-
句子的第一部分{interpolation_1}文本的第二部分{interpolation_2}
您要查找的结果可以通过在句子的子节点上迭代并逐步构建目标字符串来实现。例如:
// retrieve <sentence> as Node, not as text
Node sentence = (Node) xPath.evaluate("sentence", transUnitElement, XPathConstants.NODE);
StringBuilder resultBuilder = new StringBuilder();
NodeList children = sentence.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
short nodeType = child.getNodeType();
switch (nodeType) {
case Node.TEXT_NODE:
String text = child.getTextContent().trim();
resultBuilder.append(text);
break;
case Node.ELEMENT_NODE:
String id = ((Element) child).getAttribute("id");
resultBuilder.append(" {").append(id).append("} ");
break;
default:
throw new IllegalStateException("Unexpected node type: " + nodeType);
}
}
// outputs "first part of the text {interpolation_1} second part of the text {interpolation_2}"
System.out.println(resultBuilder.toString());
//作为节点而不是文本检索
节点句子=(Node)xPath.evaluate(“句子”,transUnitElement,XPathConstants.Node);
StringBuilder resultBuilder=新建StringBuilder();
NodeList childrends=句子.getChildNodes();
for(int i=0;i
您是否想过通过一点XSLT转换来实现这一点?在XSLT3.0中,它只是
<xsl:template match="sentence">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="a">{<xsl:value-of select="."}</xsl:template>
{