相关疑难解决方法(0)

如何使用JAXB生成CDATA块?

我正在使用JAXB将我的数据序列化为XML.类代码很简单,如下所示.我想生成包含CDATA块的XML,用于某些Args的值.例如,当前代码生成此XML:

<command>
   <args>
      <arg name="test_id">1234</arg>
      <arg name="source">&lt;html>EMAIL&lt;/html></arg>
   </args>
</command>
Run Code Online (Sandbox Code Playgroud)

我想在CDATA中包装"source"arg,使其如下所示:

<command>
   <args>
      <arg name="test_id">1234</arg>
      <arg name="source"><[![CDATA[<html>EMAIL</html>]]></arg>
   </args>
</command>
Run Code Online (Sandbox Code Playgroud)

我怎样才能在下面的代码中实现这一点?

@XmlRootElement(name="command")
public class Command {

        @XmlElementWrapper(name="args")
        protected List<Arg>  arg;
    }
@XmlRootElement(name="arg")
public class Arg {

        @XmlAttribute
        public String name;
        @XmlValue
        public String value;

        public Arg() {};

        static Arg make(final String name, final String value) {
            Arg a = new Arg();
            a.name=name; a.value=value;
            return a; }
    }
Run Code Online (Sandbox Code Playgroud)

java xml jaxb cdata

40
推荐指数
7
解决办法
7万
查看次数

XMLStreamWriter:缩进

是否真的没有办法直接使用javax.xml.stream.XMLStreamWriter(Java SE 6)编写格式化的XML?这真是令人难以置信,因为其他XML API(如JAXB和一些DOM库)能够做到这一点.即使.NET XMLStreamWriter等效也能够使用此AFAIK(如果我没记错的话,该类是System.Xml.XmlTextWriter).

这意味着我唯一的选择是重新分析XML以生成格式化输出?

例如:

            StringWriter sw = new StringWriter();
    XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
    XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(sw);
    writeXml(xmlStreamWriter);
    xmlStreamWriter.flush();
    xmlStreamWriter.close();

    TransformerFactory factory = TransformerFactory.newInstance();

    Transformer transformer = factory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

    StringWriter formattedStringWriter = new StringWriter();
    transformer.transform(new StreamSource(new StringReader(sw.toString())), new StreamResult(formattedStringWriter));
    System.out.println(formattedStringWriter);
Run Code Online (Sandbox Code Playgroud)

此解决方案的问题是属性"{http://xml.apache.org/xslt}indent-amount".我没有找到任何关于它的文档,它似乎不保证是可移植的.

那么,如果我想用标准的Java 6类做什么,我还有什么其他选择?创建一个JAXB或DOM对象图只是为了漂亮的打印?

java xml

32
推荐指数
2
解决办法
4万
查看次数

Java中的StAX XML格式

是否可以使用StAX(特别是woodstox)使用换行符和制表符格式化输出xml,即以下列形式:

<element1>
  <element2>
   someData
  </element2>
</element1>

代替:

<element1><element2>someData</element2></element1>

如果在woodstox中无法做到这一点,是否有其他轻量级库可以做到这一点?

java xml formatting stax woodstox

22
推荐指数
4
解决办法
3万
查看次数

使用StAX格式化XML文件

我正在使用StAX XML流编写器来编写XML文件.它将所有数据写入一行.我希望所有标签都缩进而不是单行.

java xml stax

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×4

xml ×4

stax ×2

cdata ×1

formatting ×1

jaxb ×1

woodstox ×1