【问题标题】:XML to CSV conversion using java, tag with colon problem使用java的XML到CSV转换,带有冒号问题的标签
【发布时间】:2018-11-26 17:05:34
【问题描述】:

我无法使用命名空间显示 xml 标记的值 - 带有冒号的标记。

当标签中没有冒号时,代码可以正常工作,但是一旦我想显示一个包含冒号的标签,程序不会抛出任何错误,只是不显示任何值。

这是 XML:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:lst="http://www.esa.int/safe/sentinel-1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:inv="http://www.w3schools.com/daco">
<lst:howto>
    <topic id="1">
        <nieco>

              <lst:title>Java</lst:title>



        </nieco>


    </topic>

</lst:howto>


</xsl:stylesheet>

XSL:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:lst="http://www.esa.int/safe/sentinel-1.0" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
topic
<xsl:for-each select="//nieco">

   <xsl:value-of select="lst:title"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

和 Java:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;

    class XMLtoCsVConversion2 {

        public static void main(String args[]) throws Exception {
            File stylesheet = new File("C:/java/howto.xsl");
            File xmlSource = new File("C:/java/howto.xml");

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse(xmlSource);

            StreamSource stylesource = new StreamSource(stylesheet);
            Transformer transformer = TransformerFactory.newInstance()
                    .newTransformer(stylesource);
            Source source = new DOMSource(document);
            Result outputTarget = new StreamResult(new File("xyz.csv"));
            transformer.transform(source, outputTarget);
            System.out.println("done");

        }
    }

确实简化了代码以找到问题的原因,但我无法弄清楚。 如果我要从 xml 中的标记和 xsl 中删除 lst:,它会起作用,只要有冒号,程序就不会显示任何值。 但是我们收到的 XML 包含大量带有冒号的标签,所以我会解决这个问题。

如果您知道问题出在哪里,请告诉我:)

谢谢

预期输出: 话题 爪哇

【问题讨论】:

标签: java xml csv tags colon


【解决方案1】:

试试这个;

    public static void main(String args[]) throws Exception {
        File stylesheet = new File("C:/java/howto.xsl");
        File xmlSource = new File("C:/java/howto.xml");

//        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//        DocumentBuilder builder = factory.newDocumentBuilder();
//        Document document = builder.parse(xmlSource);

        StreamSource stylesource = new StreamSource(stylesheet);
        Transformer transformer = TransformerFactory.newInstance()
                .newTransformer(stylesource);
        //Source source = new DOMSource(document);
        Source source = new StreamSource(xmlSource);
        Result outputTarget = new StreamResult(new File("C:/java/xyz.csv"));
        transformer.transform(source, outputTarget);
        System.out.println("done");

    }

【讨论】:

  • 嗨,Erandika,非常感谢,它有帮助,但现在我收到“元素“typ:id”的前缀“typ”未绑定。”错误消息:(我尝试了这个主题的解决方案stackoverflow.com/questions/13884084/…。但没有帮助:你能帮忙吗?
  • @bennes,你能发布你的新 xml 和 xsl 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多