【问题标题】:Write unescaped attribute with XMLStreamWriter使用 XMLStreamWriter 写入未转义的属性
【发布时间】:2014-10-21 14:02:36
【问题描述】:

我正在尝试将自定义实体编写为属性值:

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"
/>

【问题讨论】:

    标签: java xml dtd stax


    【解决方案1】:

    自定义了Writer,它将用&amp;MAR_STOREENT_ID; 替换MYENTITY_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:");
    

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2014-04-09
      相关资源
      最近更新 更多