【发布时间】:2020-01-09 17:54:41
【问题描述】:
我正在使用 core-site.xml 文件进行 hadoop 操作,并使用 org.apache.hadoop.conf.Configuration 类加载它。
似乎常规转义字符串正在正确加载。但是 CDATA 语句是空白的,根本没有解析。
core-site.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>cdata.example</name>
<value><![CDATA[Joe's <&> Bar]]></value>
</property>
<property>
<name>escaped.example</name>
<value>Joe's <&> Bar</value>
</property>
</configuration>
Main.java:
import org.apache.hadoop.conf.Configuration;
import java.net.MalformedURLException;
import java.io.File;
import java.net.URI;
public class Main {
public static void main(String[] args) {
Configuration conf = new Configuration();
File conffile = new File("core-site.xml");
try {
conf.addResource(conffile.toURI().toURL());
System.out.println(conf.get("cdata.example"));
System.out.println(conf.get("escaped.example"));
} catch(MalformedURLException e) {
System.out.println("MalformedURLException");
}
}
}
输出是:
空
乔的酒吧
这是为什么呢?根据 XML 标准,CDATA 不是正确的转义方案吗?
【问题讨论】:
-
我怀疑代码检查
nodeName等于#text并且忘记检查#cdata-section。一个非常有趣的实验是将 XML 更改为<value>XXX <![CDATA[Joe's <&> Bar]]> YYY</value>。如果您收到XXX YYY,那么是时候针对 Hadoop 提交错误了。
标签: java hadoop configuration escaping cdata