【问题标题】:Bug reading CDATA from xml element in Java从 Java 中的 xml 元素读取 CDATA 的错误
【发布时间】:2014-03-13 20:52:47
【问题描述】:

在这里挠了一阵子……

所以我有一个 Java 应用程序。在这个应用程序中,我需要读取一个 XML 文件,从一个元素中获取字符数据,将其传递给一个新的 DOM 文档,更改一些元素,并将新的文档转换回 CDATA,将其重新附加到原始消息并发送关掉。

所以...这是我需要读入的消息,以及读入它的函数:

private static String getCharacterDataFromElement(Node e) {
    Node child = e.getFirstChild();
    if (child instanceof CharacterData) {
      CharacterData cd = (CharacterData) child;
      System.out.println(cd.getBaseURI());
      System.out.println(cd.getData());
      return cd.getBaseURI();
    }
    return "error...";
}

这里是需要更改的xml文件

<RLSOLVE_MSG version="5.0">
<MESSAGE>
    <SOURCE_ID>DP01</SOURCE_ID>
    <TRANS_NUM>000001</TRANS_NUM>
</MESSAGE>
<POI_MSG type="interaction">
    <INTERACTION name="posPrintReceipt">
        <RECEIPT type="merchant" format="xml">
            <![CDATA[<RECEIPT>
  <AUTH_CODE>06130</AUTH_CODE>
  <CARD_SCHEME>VISA</CARD_SCHEME>
  <CURRENCY_CODE>GBP</CURRENCY_CODE>
  <CUSTOMER_PRESENCE>internet</CUSTOMER_PRESENCE>
  <FINAL_AMOUNT>1.00</FINAL_AMOUNT>
  <MERCHANT_NUMBER>8888888</MERCHANT_NUMBER>
  <PAN_NUMBER>454420******0382</PAN_NUMBER>
  <PAN_EXPIRY>12/15</PAN_EXPIRY>
  <TERMINAL_ID>04176421</TERMINAL_ID>
  <TOKEN>454420bbbbbkqrm0382</TOKEN>
  <TOTAL_AMOUNT>1.00</TOTAL_AMOUNT>
  <TRANSACTION_DATA_SOURCE>keyed</TRANSACTION_DATA_SOURCE>
  <TRANSACTION_DATE>14/02/2014</TRANSACTION_DATE>
  <TRANSACTION_NUMBER>000001</TRANSACTION_NUMBER>
  <TRANSACTION_RESPONSE>06130</TRANSACTION_RESPONSE>
  <TRANSACTION_TIME>17:13:17</TRANSACTION_TIME>
  <TRANSACTION_TYPE>purchase</TRANSACTION_TYPE>
  <VERIFICATION_METHOD>unknown</VERIFICATION_METHOD>
  <DUPLICATE>false</DUPLICATE>
</RECEIPT>]]>
            </RECEIPT>
        </INTERACTION>
    </POI_MSG>
</RLSOLVE_MSG>

执行cd.getData()时,返回"\n \t \t \t \t"

有什么想法吗?

【问题讨论】:

  • 你为什么假设只有一个文本节点?
  • 什么意思? (我对xml的理解还不是很深)

标签: java xml dom cdata


【解决方案1】:

仔细查看您的 XML。如果我将它们写在一行中,实际上是

<RECEIPT type="merchant" format="xml">\n\t\t\t<![CDATA[...]]>\n\t\t\t</RECEIPT>

所以树实际上看起来像:

            RECEIPT
       /      |      \
 \n\t\t\t   CDATA   \n\t\t\t

所以你有三个孩子。由于您只获得第一个孩子,因此您只会获得\n\t\t\t

遍历所有孩子并连接他们的数据,你应该拥有一切。

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多