【发布时间】:2017-10-11 16:51:37
【问题描述】:
我有一个 xml 文件,如下所示:
<?xml version="1.0"?>
<Book>
<Title>Ulysses</Title>
<Author>James <b>Joyce</b></Author>
</Book>
我需要使用 Java 将其解析成 pojo 之类的
title="Ulysses"
author="James <b>Joyce</b>"
换句话说,我需要 html 或可能的自定义 xml 标记在解析时保持为纯文本而不是 xml 元素。
我根本无法编辑 XML,但我可以创建一个自定义 xslt 文件来转换 xml。
我有以下 Java 代码使用 xslt 来帮助读取 xml,
TransformerFactory factory = TransformerFactory.newInstance();
Source stylesheetSource = new StreamSource(new File(stylesheetPathname).getAbsoluteFile());
Transformer transformer = factory.newTransformer(stylesheetSource);
Source inputSource = new StreamSource(new File(inputPathname).getAbsoluteFile());
Result outputResult = new StreamResult(new File(outputPathname).getAbsoluteFile());
transformer.transform(inputSource, outputResult);
这确实将我的 xslt 应用于写出的文件,但我无法提出正确的 xslt 来执行此操作。我查看了Add CDATA to an xml file,但这对我不起作用。
基本上,我相信我希望文件看起来像
<?xml version="1.0"?>
<Book>
<Title>Ulysses</Title>
<Author><![CDATA[James <b>Joyce</b>]]></Author>
</Book>
然后我可以提取
"James <b>Joyce</b>"。我尝试了这里建议的方法:Add CDATA to an xml file
但这对我不起作用。
我使用了以下 xslt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="Author">
<xsl:copy>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:copy-of select="*"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</xsl:copy>
</xsl:template>
这产生了:
<?xml version="1.0" encoding="UTF-8"?>
Ulysses
<Author><![CDATA[
<b>Joyce</b>]]></Author>
你能帮忙吗?我希望完整地写出原始文档,但 CDATA 围绕着 author 元素中的所有内容。 谢谢
【问题讨论】:
-
“它对我不起作用”是什么样的?带有标记的 XML 不是正确的 XML。您可以转义这些魔术字符或包装在 CDATA 中。没有其他选择。