繁体   English   中英

使用XMLStreamWriter编写未转义的属性

[英]Write unescaped attribute with XMLStreamWriter

我试图写一个自定义实体作为属性值:

out.writeAttribute("storeent_id", "&MAR_STOREENT_ID;");

期望的:

<dmactivity
  dmactivity_id="@dmactivity_id_collateral_21003"
  storeent_id="&MAR_STOREENT_ID;"
  optcounter="0"
/>

实际

<dmactivity
    dmactivity_id="@dmactivity_BoysPantsRow2_Content"
    storeent_id="&amp;MAR_STOREENT_ID;"
    optcounter="0"
/>

制作了一个自定义Writer ,它将用&MAR_STOREENT_ID;替换MYENTITY_MAR_STOREENT_ID: &MAR_STOREENT_ID; 适用于小型xml。

public class ReplacingWriter extends StringWriter {

    protected Writer out;

    public ReplacingWriter(Writer out) {
        this.out = out;
    }

    @Override
    public void close() throws IOException {
        String s = toString();
        for (int i = 0, len = rules.size(); i < len;) {
            String a = rules.get(i++);
            String b = rules.get(i++);
            s = s.replaceAll(a, b);
        }
        out.write(s);
        out.close();
    }

    private final ArrayList<String> rules = new ArrayList<String>();

    public void addRule(String regex, String replacement) {
        rules.ensureCapacity(rules.size() + 2);
        rules.add(regex);
        rules.add(replacement);
    }
}
...
Serializer ser = processor.newSerializer();
rwr = new ReplacingWriter(fos);
rwr.addRule("MYENTITY_([^:]*):", "&$1;");
ser.setOutputWriter(rwr);
...
Serializer ser = processor.newSerializer();
rwr = new ReplacingWriter(fos);
rwr.addRule("MYENTITY_([^:]*):", "&$1;");
ser.setOutputWriter(rwr);
...
out.writeAttribute("storeent_id", "MYENTITY_MAR_STOREENT_ID:");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM