首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在已分段行的现有xml文件中添加xml-样式表。

在已分段行的现有xml文件中添加xml-样式表。
EN

Stack Overflow用户
提问于 2013-10-06 08:54:09
回答 1查看 1.3K关注 0票数 2

我有xml字符串文件,我想在xml字符串文件的分段行中添加xml样式表。但是下面给出的代码给了我这样的输出:首先是xml- string文件,然后在xml字符串文件的末尾追加xml-样式表,但是我想要在xml- string的分段行中的样式表。请建议我应该如何做到这一点。谢谢。

我的代码是:

代码语言:javascript
复制
public class StringToDocumentToString {

public static void main(String[] args)
        throws TransformerConfigurationException {
    String xmlstring = null;
    String filepath = "E:/C-CDA/MU2_CDA_WORKSPACE/AddingStylesheetTOxml/documentfile.txt";
    final String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
            + "<Emp id=\"1\"><name>Pankaj</name><age>25</age>\n"
            + "<role>Developer</role><gen>Male</gen></Emp>";


    Document doc2 = convertStringToDocument(xmlStr);
    Document doc1 = null;
    try {
        doc1 = addingStylesheet(doc2);
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String str = convertDocumentToString(doc1);
    System.out.println(str);
}

private static <ProcessingInstructionImpl> Document addingStylesheet(
        Document doc) throws TransformerConfigurationException,
        ParserConfigurationException {

    ProcessingInstructionImpl pi = (ProcessingInstructionImpl) doc
            .createProcessingInstruction("xml-stylesheet",
                    "type=\"text/xsl\" href=\"my.stylesheet.xsl\"");
    Element root = doc.createElement("root-element");
    doc.appendChild(root);

    doc.insertBefore((Node) pi, root);
    return doc;

}

private static String convertDocumentToString(Document doc) {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer;
    try {
        transformer = tf.newTransformer();
        // below code to remove XML declaration
        // transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
        // "yes");
        StringWriter writer = new StringWriter();
        transformer.transform(new DOMSource(doc), new StreamResult(writer));
        String output = writer.getBuffer().toString();
        return output;
    } catch (TransformerException e) {
        e.printStackTrace();
    }

    return null;
}

private static Document convertStringToDocument(String xmlStr) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder;
    Document doc = null;
    try {
        builder = factory.newDocumentBuilder();
        doc = builder.parse(new InputSource(new StringReader(xmlStr)));

    } catch (Exception e) {
        e.printStackTrace();
    }
    return doc;
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-06 21:36:24

语句Element root = doc.createElement("root-element");创建一个名为root-element的新元素,当您调用doc.appendChild(root);时,实际上是将它追加到文档的末尾。因此,在这两条声明之后,您的文档应该如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Emp id="1">
    <name>Pankaj</name>
    <age>25</age>
    <role>Developer</role>
    <gen>Male</gen>
</Emp>
<root-element/>

然后是doc.insertBefore((Node) pi, root);,它导致在这个新添加的元素之前添加样式表处理指令。

要解决这个问题,您必须检索指向文档根元素的指针(而不是添加名为root-element的新元素),然后在它前面添加pi。这可以通过调用getDocumentElement()对象的doc方法来实现。因此,为了解决这个问题,只需在main方法中使用以下代码:

代码语言:javascript
复制
Element root = doc.getDocumentElement();
doc.insertBefore((Node) pi, root);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19207091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档