解析在元素中包含XML的XML,可以这样做

joe*_*e90 3 java xml

我有一个XML的"复杂项目",然后是一个包含许多其他信息的"workitem"(在xml中),我希望这包含一个包含xml中复杂项的字符串.

例如:

<inouts name="ClaimType" type="complex" value="<xml string here>"/>
Run Code Online (Sandbox Code Playgroud)

但是,尝试SAX和其他java解析器我无法让它处理这一行,它不喜欢字符串中的<或","我试图转义,并将"转换为".

反正有这个吗?或者我必须提出另一种解决方案吗?

谢谢

Mik*_*ton 5

可能最简单的解决方案是使用CDATA部分.您可以将示例转换为如下所示:

<inouts name="ClaimType" type="complex">
  <![CDATA[
    <xml string here>
  ]]>
</inouts>
Run Code Online (Sandbox Code Playgroud)

如果要为多个字符串存储多个属性,则可以使用具有不同名称的多个子元素:

<inouts name="ClaimType" type="complex">
  <value1>
    <![CDATA[
      <xml string here>
    ]]>
  </value1>
  <value2>
    <![CDATA[
      <xml string here>
    ]]>
  </value2>
</inouts>
Run Code Online (Sandbox Code Playgroud)

或者具有标识ID的多个值元素:

<inouts name="ClaimType" type="complex">
  <value id="complexString1">
    <![CDATA[
      <xml string here>
    ]]>
  </value>
  <value id="complexString2">
    <![CDATA[
      <xml string here>
    ]]>
  </value>
</inouts>
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 5

我想你会发现你正在处理的XML不会解析很多解析器,因为它是无效的.如果您可以控制XML,那么您至少需要转义属性,因此它类似于:

<inouts name="ClaimType" type="complex" value="&lt;xml string here&gt;" />
Run Code Online (Sandbox Code Playgroud)

然后,一旦提取了属性,就可以重新解析它以将其视为XML.

或者,您可以采用上述方法之一(使用CDATA部分)对XML进行一些重新分解.

如果您无法控制XML,可以尝试使用TagSoup库来解析它以了解您的工作方式.(免责声明:我只使用TagSoup for HTML,我不知道它是如何与非HTML内容一起使用的)

(标签汤网站实际上出现在ATM上,但你应该能够在网上找到足够的doco,并通过maven存储库下载)