我使用Java后端创建传递给浏览器的XML字符串。 目前我正在使用简单的字符串操作来生成此XML。 我是否必须在Java中使用一些XML库来生成XML字符串? 我觉得这些库与我需要的相比很难使用。

===============>>#1 票数:11 已采纳

这不是必要的,但是可取的。 但是,如果字符串操作适合您,那就去吧! 在很多情况下,可以手动安全地构建小型或简单的XML文本。

请注意,创建XML文本比看起来更难。 这是我要考虑的一些标准:

  • 第一:你对进入xml的信息有多少控制

您对源数据的控制越少,您遇到麻烦的可能性就越大,并且库变得越有利。 例如:(a)您能否保证元素名称永远不会有名称中的非法字符? (b)属性内容中的引号怎么样? 他们会发生,你在处理它们吗? (c)数据是否包含可能需要编码为实体的任何内容 (例如,通常需要输出的数据小于< ); 你做得对吗?

  • 第二,可维护性:构建XML的代码是否易于被其他人理解?

你可能不想被生活中的代码所困扰。 我使用过手工构建XML的二手C ++代码,它可能令人惊讶地模糊不清。 当然,如果这是你的个人项目,那么你不必担心“其他人”:用“一年”代替上面的“其他人”。

我不担心性能。 如果您的XML足够简单,您可以手写它,那么库中的任何开销都可能毫无意义。 当然,您的情况可能有所不同,但您应该先测量以证明它。

最后,是; 如果它足够简单,你可以手工构建XML文本; 但不知道可用的库可能不是正确的原因。

现代XML库是一个非常强大的工具,但它也可能令人生畏。 但是,学习XML库的基本知识并不是那么难,而且它可以非常方便; 除此之外,它几乎是当今就业市场的必需品。 在获得必需品之前,不要陷入命名空间,模式和其他更高级功能的困境。

祝好运。

===============>>#2 票数:7

Xml很难。 解析自己是一个坏主意,自己生成内容甚至更糟糕。 看看Xml 1.1规范。

你必须处理诸如正确的编码,属性编码(例如,产生无效的xml),正确的CDATA转义,UTF编码,自定义DTD实体之类的事情,并且没有使用默认/空命名空间,命名空间属性抛出混合xml命名空间等

学习一个工具包,有很多可用的。

===============>>#3 票数:3

我认为自定义字符串操作很好,但你必须记住两件事:

  1. 您的代码不像库那样成熟。 在计划中分配时间来处理弹出的错误。
  2. 当xml开始增长时(无论是在性能还是易用性方面),您的方法可能无法像第三方库一样扩展。

我知道一个代码库使用自定义字符串操作xml输出(和第三方库输入)。 一开始没关系,但过了一段时间后变成了一个真正的麻烦。

===============>>#4 票数:2

是的,使用该库。

有人花时间和精力去创造通常比你想象的更好的东西。 字符串操作用于发送回单个节点,但是一旦您开始需要操作DOM或使用XPath查询,库就会保存您。

===============>>#5 票数:2

如果不使用库,则可能会生成或解析格式不正确的数据,这些数据迟早发生。 出于同样的原因,XHTML中不允许使用document.write ,因此不应将XML标记编写为字符串。

===============>>#6 票数:2

是。

跳过基本工具是没有意义的:即使编写xml也是非常重要的,不得不逃避那些&符号,更不用说命名空间绑定(如果需要)。 最后,libs通常可以更可靠地读写xml,但效率更高(尤其适用于Java)。

但如果它们看起来过于复杂,你可能一直在寻找错误的工具。 使用JAXB或XStream进行数据绑定很简单; 但对于简单的直接XML输出,我使用StaxMate 它实际上可以通过多种方式简化任务(自动关闭开始标记,如果需要则写入名称空间声明等)。

===============>>#7 票数:1

不 - 如果您可以自己解析(正如您所做),并且它可以根据您的需求进行扩展,您不需要任何库。

只需确保满足您未来的需求 - 使用库可以更好地完成复杂的xml创建 - 其中一些也非常简单。

===============>>#8 票数:1

您不必使用库来解析XML,但请查看此问题
在重新发明轮子之前应该考虑哪些因素?
在开始编写自己的代码以解析/生成xml之前。

===============>>#9 票数:1

我在生产代码中唯一一次做过这样的事情就是当一个同事和我构建了一个预处理器,以便我们可以将来自其他文件的XML片段嵌入到更大的XML中。 在加载时,我们首先解析这些嵌入(XML注释字符串中的文件引用),并用它们引用的实际片段替换它们。 然后我们将组合结果传递给XML Parser。

===============>>#10 票数:0

不 - 特别是对于生成(解析我不太倾向于因为输入文本总是让你感到惊讶)。 我认为它很好 - 但是如果你发现自己花费了几分钟来维护自己的代码,那么准备转移到图书馆。

===============>>#11 票数:0

我认为使用JDK附带的DOM XML API并不困难,因此很容易创建Element节点,属性等......后来很容易将字符串转换为DOM文档,将DOM文档转换为字符串

在第一页谷歌发现来自西班牙( 西班牙语XML示例 ):

public String DOM2String(Document doc)
{
    TransformerFactory transformerFactory =TransformerFactory.newInstance();
    Transformer transformer = null;
    try{
        transformer = transformerFactory.newTransformer();
    }catch (javax.xml.transform.TransformerConfigurationException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    Source source = new DOMSource(doc);

    StringWriter writer = new StringWriter();
    Result result = new StreamResult(writer);
    try{
        transformer.transform(source,result);
    }catch (javax.xml.transform.TransformerException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    String s = writer.toString();
    return s;
}

public Document string2DOM(String s)
{
    Document tmpX=null;
    DocumentBuilder builder = null;
    try{
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }catch(javax.xml.parsers.ParserConfigurationException error){
        coderror=10;
        msgerror="Error crando factory String2DOM "+error.getMessage();
        return null;
    }
    try{
        tmpX=builder.parse(new ByteArrayInputStream(s.getBytes()));
    }catch(org.xml.sax.SAXException error){
        coderror=10;
        msgerror="Error parseo SAX String2DOM "+error.getMessage();
        return null;
    }catch(IOException error){
        coderror=10;
        msgerror="Error generando Bytes String2DOM "+error.getMessage();
        return null;
    }
    return tmpX;
}

  ask by Niyaz translate from so

未解决问题?本站智能推荐:

2回复

Java库使用/操作Sharepoint 2013 Rest OData XML Result

我有一个Android应用程序使用OData消耗SharePoint 2013 Rest Web服务和查询。我需要在此Android应用程序中显示来自SharePoint的数据。 我尝试显示SharePoint列表数据。例如,我需要从List中的特定列获取数据。结果我得到一个复杂的XML。
3回复

使用Java的Oracle xml操作

具有一个带有表STUDENT的Oracle数据库,该表具有一个STUDEN_NAME字段,是否可以通过XML标记来检索该数据库? 谢谢
3回复

是否有一个Java库将XML(LOM)绑定到XML + RDF?

对于一个教育项目,我需要一些代码(如果存在)将XML文件(特别是LOM元数据,但是xml很好)转换为XML + RDF。 我需要这样做是因为我正在使用RDF存储(4store)来查询三元组并加快搜索速度。 我读到XSLT可以将任何xml转换为另一个xml,因此,如果您知道有实际的类,
4回复

Java和Python之间的XML序列化库互操作性

我一直在寻找一个xml序列化库,该库可以将(Java / Python)对象序列化和反序列化为xml并返回。 我现在正在使用XStream for Java。 如果XStream具有要从Xstream生成的xml反序列化的python版本,那将为我完成。 除非Thrift或其他此类库允许数
1回复

是否有一个Java库来验证XML片段是否是更大的XML文件的子集?

我正在寻找可以执行以下操作的代码。 给出一小段XML,说: 和一个完整的XML文件: 检查代码段是否确实是完整XML文件的有效子集。 我一直在寻找看起来非常好的XMLUnit ,但它似乎只是相互验证完整的文件。 对于上面的示例,可以使用简单的字符串比较,但我想支持的其他
1回复

Java XML操作

我有一个XML文件,我需要从上到下遍历所有节点,以使用节点中所需的相关值设置文本字段。 我期待一个简单的解决方法。
2回复

对使用数据库的2个xml文件使用相同的类

我想实现一个由2个表(编号和接收器编号)组成的数据库。 实际上,我有2个xml文件,一个使用数字表,另一个使用接收器号。 但是,下面的代码仅允许将第一个表用于两个xml。 以前,我曾尝试实现两组不同的类文件,如下所述。 但它会使整个应用程序崩溃。 因此,我尝试更改为使用与接收器编号
1回复

Apache XML安全性库是否与IBM的JDK兼容

我开发了一个使用Apache XML安全性库进行xml加密和签名的应用程序。 它可以在SUN的JDK上运行而没有任何问题,但是IBM JDK给我带来了很多问题。 它没有正确签名(验证失败),pkcs11提供程序无法加密。 似乎该问题是因为IBM提供了自己的安全提供程序。 我试图注
1回复

Netbean6.9-是否为数据库连接定义了xml?

目标: 创建Netbean项目并放入存储库(任意)。 当其他开发人员签出Netbean项目时,他们可以从Netbean IDE中“打开项目”,然后按执行以打开浏览器并开始测试Web应用程序。 我编写了REST Web应用程序( Toplink-essential, JAX-RS,
3回复

是否有将YAML或XML文件转换为Java代码的工具或库?

是否有工具或库可以将序列化为YAML的对象或XML文件转换为创建该对象的Java代码? 从技术角度来看,我认为这里没有困难。 Yaml和XStream(或其他类似工具)都需要通过反射查找Java类名称,查找构造函数,调用它,然后查找设置器并调用它们。 反射调用可以被相同的Java代码生