java - 如何处理 xml 标签中的下划线
问题描述
如何处理 xml 标签中的下划线。这是我正在工作的代码。它正在为我生成带有双下划线(“__”)而不是单下划线(“_”)的 xml 标记。谁能帮我克服这个问题。
转换器路由.Java
public class ConverterRoute implements RoutesBuilder {
private static final String SOURCE_INPUT_PATH = "file://inbox?fileName=Source.txt";
private static final String SOURCE_OUTPUT_PATH = "file://outbox?fileName=file_$simple{date:now:yyyyMMddHHmmssSSS}.xml";
public void addRoutesToCamelContext(CamelContext context) throws Exception {
context.addRoutes(new RouteBuilder() {
public void configure() {
try {
DataFormat bindyFixed = new BindyCsvDataFormat(Test.class);
XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
xStreamDataFormat.setAliases(Collections.singletonMap("TEST_INB",Test.class.getCanonicalName()));
from(SOURCE_INPUT_PATH).
split().tokenize(System.lineSeparator()).
unmarshal(bindyFixed).
marshal(xStreamDataFormat).
to(SOURCE_OUTPUT_PATH).log("Finished Transformation").end();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
CamelConfig.java
@Component
public class CamelConfig extends RouteBuilder {
@Override
public void configure() throws Exception {
try {
CamelContext context = new DefaultCamelContext();
ConverterRoute route = new ConverterRoute();
route.addRoutesToCamelContext(context);
context.start();
Thread.sleep(5000);
context.stop();
} catch (Exception exe) {
exe.printStackTrace();
}
}
}
测试.java
@CsvRecord(separator = "\\|",skipField = true,name = "TEST_INB")
public class Test {
@DataField(pos = 1,name = "ALT_NUM")
private BigDecimal ALT_NUM;
@DataField(pos = 2,name = "PRTNUM")
private BigDecimal PRTNUM;
@DataField(pos = 3,name = "UOMCOD")
private Integer UOMCOD;
}
来源.txt
55158|11901|2346
55158|11101|3454
输出
文件.xml
<?xml version='1.0' encoding='UTF-8'?>
<TEST__INB>
<ALT__NUM>55158</ALT__NUM>
<PRTNUM>11901</PRTNUM>
<UOMCOD>2346</UOMCOD>
</TEST__INB>
预期输出
文件.xml
<?xml version='1.0' encoding='UTF-8'?>
<TEST_INB>
<ALT_NUM>55158</ALT_NUM>
<PRTNUM>11901</PRTNUM>
<UOMCOD>2346</UOMCOD>
</TEST_INB>
解决方案
XStream 在生成 XML 时在内部使用下划线来转义字符。
请参阅常见问题解答:http: //x-stream.github.io/faq.html#XML_double_underscores
您可以尝试使用自定义驱动程序(而不是默认驱动程序):
XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("_-", "_");
Dom4JDriver myCustomDriver = new Dom4JDriver(nameCoder);
...
XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
xStreamDataFormat.setDriver(myCustomDriver);
或者,如果不工作,也许尝试使用这个其他替代驱动程序:
DomDriver myCustomDriver = new DomDriver("UTF_8", new NoNameCoder());
希望这有效!
推荐阅读
- python - 如何将返回的 pandas 数据框强制为视图,以便我可以执行转换?
- flutter - AppBar 中的扩展小部件
- java - 如何处理 AWT 框架中的关闭按钮
- python - 在 Python 中如何将命令的输出写入文件
- rust - 在 Rust 中迭代 Vec 的替代元素的最佳方法是什么?
- javascript - 使用 Node.js 将文件上传到 Google Cloud Storage('bucketName' 已声明)
- django - Django 2.1 - 将用户链接到相关模型
- c# - 使用 DispEventAdvise 时应用程序退出异常
- python - 从 ComboBox 实现“选择端口”功能
- c - C中的未知类型名称?