标签: xerces

Xerces C++ - 加载,读取和保存,替代方案?

我正在寻找一个教程来加载XML文件,读取它,更改它,最后用C++保存它.我正在使用Linux Ubuntu并尝试使用Xerces.谷歌和很多时间,我只能加载一个XML文件:

#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>

#include <iostream>

using namespace std;
using namespace xercesc;

int main (int argc, char* args[]) {

    try {
        XMLPlatformUtils::Initialize();
    }
    catch (const XMLException& toCatch) {
        char* message = XMLString::transcode(toCatch.getMessage());
        cout << "Error during initialization! :\n"
             << message << "\n";
        XMLString::release(&message);
        return 1;
    }

    XercesDOMParser* parser = new XercesDOMParser();
    parser->setValidationScheme(XercesDOMParser::Val_Always);
    parser->setDoNamespaces(true);    // optional

    ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
    parser->setErrorHandler(errHandler);

    const char* xmlFile = "demo.xml";

    try {
        parser->parse(xmlFile);
    }
    catch …
Run Code Online (Sandbox Code Playgroud)

c++ xml linux xerces

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

来自java的libxml2

这个问题与最快的XML解析器有些相关, 适用于Java中的小型简单文档, 但有一些更具体的细节.

我正在开发一个需要解析许多(数百万),小(约300k)xml文档的应用程序.目前的实现是使用xerces-j,并且在1.5 GHz机器上每xml文档大约需要2.5 ms.我想改善这种表现.我偶然发现了这篇文章

http://www.xml.com/pub/a/2007/05/16/xml-parser-benchmarks-part-2.html

声称libxml2可以解析比任何java解析器快一个数量级.我不确定我是否相信它,但它引起了我的注意. 有没有人尝试过使用jvm中的libxml2?如果是这样,它比java dom解析(xerces)更快吗? 我想我仍然需要我的java dom结构,但我猜测从c-struct dom复制到java-dom不应该花费很长时间.我必须有java-dom - sax在这种情况下不会帮助我.

更新:我刚刚为libxml2写了一个测试,它没有比xerces快得多...授予我的c编码能力非常生疏.

更新我在这里扩展了一个问题: 为什么sax解析比dom解析更快?stax是如何工作的? 并且我愿意放弃dom.

谢谢

java xml dom xerces libxml2

7
推荐指数
1
解决办法
3339
查看次数

为什么Apache Xerces/Xalan会为我的序列化输出添加额外的回车?

我正在使用Apache Xerces 2.11.0和Apache Xalan 2.7.1,我在序列化的XML中遇到了额外的回车字符问题.

我有这个(伪)代码:

String myString = ...;
Document doc = ...;

Element item = doc.createElement("item");
item.appendChild(doc.createCDATASection(myString));

Transformer transformer = ...;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Result result = new StreamResult(stream);
transformer.transform(new DOMSource(document), result);
Run Code Online (Sandbox Code Playgroud)

现在myString包含换行符(\r\n),(实际上它是base64编码数据)但是当我查看序列化输出时,还有其他\r字符.

输入:

Line 1 \r\n
Line 2 \r\n
Line 3 \r\n
Run Code Online (Sandbox Code Playgroud)

输出:

Line 1 \r\r\n
Line 2 \r\r\n
Line 3 \r\r\n
Run Code Online (Sandbox Code Playgroud)

如果我使用createTextNode而不是createCDATASection输出变得更有趣:

Line 1 &#13;\r\n
Line 2 &#13;\r\n
Line 3 &#13;\r\n
Run Code Online (Sandbox Code Playgroud)

似乎在序列化期间引入了附加字符,DOM树似乎是正确的.(根据getTextContent() …

xml xml-serialization xerces xalan

7
推荐指数
1
解决办法
3019
查看次数

在ProGuard中解决"库类的重复定义"

我有一个包含Xerces库的Java项目.

当我用Proguard处理项目时,我收到警告:

Note: duplicate definition of library class [org.w3c.dom.html.HTMLDOMImplementation]
Run Code Online (Sandbox Code Playgroud)

我在Xerces中看到这个类存在,并且JDK 1.6的rt.jar中存在相同的类.

ProGuard创建的jar文件无法启动(错误:"发生了Java异常").我怎么解决这个问题?谢谢!


(注意:我与Netbeans合作)

java proguard xerces

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

在使用DocumentBuilder.parse解析格式良好的XML时,如何关闭验证?

我正在使用Java 6.我想解析我知道格式正确的XHTML.因此,我不想对文档中引用的DTD或其他模式进行任何验证.但是,我无法弄清楚如何关闭验证.我有

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(false);
    final DocumentBuilder b = factory.newDocumentBuilder();
    final InputSource s = new InputSource(new StringReader(str));
    org.w3c.dom.Document result = b.parse(s);
Run Code Online (Sandbox Code Playgroud)

但我仍然在最后一行得到例外......

java.net.SocketException: Unexpected end of file from server
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:777)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:774)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1282)
    at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:283)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1194)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at com.myco.myproj.util.XmlUtilities.getStringAsDocument(XmlUtilities.java:130)
    at com.myco.myproj.util.NetUtilities.getUrlAsDocument(NetUtilities.java:30)
    at com.myco.myproj.parsers.impl.AbstractChicagoReaderParser.parsePage(AbstractChicagoReaderParser.java:144)
    at com.myco.myproj.parsers.impl.AbstractChicagoReaderParser.getEvents(AbstractChicagoReaderParser.java:112)
    at com.myco.myproj.parsers.impl.ChicagoReaderParserTest.testParser(ChicagoReaderParserTest.java:29)
    at …
Run Code Online (Sandbox Code Playgroud)

java xhtml parsing xerces

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

在xml架构中使用keyref为具有值列表的属性

我正在尝试设计一个模式来验证已经在应用程序中使用的xml格式(重新设计xml的空间不大).

我正在尝试利用xml架构字典的key和keyref元素来验证身份约束.

一个特别的问题是xml模拟一对多关系的方式

<spaceships>
    <spaceship guns="gun1 gun2 gun3"/>
</spaceships>
<guns>
    <gun id="gun1"/>
    <gun id="gun2"/>
    <gun id="gun3"/>
</guns>
Run Code Online (Sandbox Code Playgroud)

我在我的架构中想出了这对key/keyref

<xs:key name="gunKey">
    <xs:selector xpath="guns/gun" />
    <xs:field xpath="@id" />
</xs:key>

<xs:keyref name="gunRef" refer="gunKey">
    <xs:selector xpath="spaceships/spaceship" />
    <xs:field xpath="@guns" />
</xs:keyref>
Run Code Online (Sandbox Code Playgroud)

这不会与xerces抗议验证:

键'gun1 gun2 gun3'键'gunRef'找不到元素的身份约束.

无论如何,在模式中表示列表的值是逗号分隔的对另一个实体的引用列表,并仍然获得身份约束验证的好处?

java xml schema xsd xerces

7
推荐指数
1
解决办法
1256
查看次数

在TransformerFactory中设置FEATURE_SECURE_PROCESSING是否还会更新其他安全功能?

在jdk1.6中,当我设置

transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false)
Run Code Online (Sandbox Code Playgroud)

我遇到以下错误:

javax.xml.transform.TransformerConfigurationException:无法在此TransformerFactory上设置功能' http://javax.xml.XMLConstants/property/accessExternalDTD '。在org.apache.xalan.processor.TransformerFactoryImpl.setFeature(TransformerFactoryImpl.java:418)

就像我在这里找到的一样:如何防止具有META-INF \ services \ javax.xml.transform.TransformerFactory的xalan.jar接管Xalan实现中内置的JDK 1.6? 我无法进行此处建议的更改,因为管理员还会查看其他API冲突。

并按此链接:http : //xml.apache.org/xalan-j/features.html#domsource 您可以使用该TransformerFactory.setFeature(String, boolean)方法来设置功能的值。Xalan-Java仅支持设置XMLConstants.FEATURE_SECURE_PROCESSING功能。对于所有其他功能,TransformerFactory公开其值,但不能更改其状态。

因此,如果使用TransormerFactory的xalan实现,似乎只能设置此功能。

transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Run Code Online (Sandbox Code Playgroud)

最后我的问题:如果我们设置功能:

transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Run Code Online (Sandbox Code Playgroud)

然后是另一个功能(XMLConstants.ACCESS_EXTERNAL_DTD)自动设置为false。
我从设置的日志中获得了上述功能“ false”。但是我想确定是否accessExternalDTD默认将功能设置为false或将安全处理功能设置为true。

java xerces xalan

7
推荐指数
2
解决办法
5507
查看次数

XIncludeAwareParserConfiguration与XMLParserConfiguration不兼容

在AIX平台上将ear文件部署到WLS 10.3时,我收到此错误.同样的耳朵在Windows/Linux平台上运行良好.

Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration incompatible with org.apache.xerces.xni.parser.XMLParserConfiguration
    at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
    at weblogic.xml.jaxp.WebLogicDocumentBuilderFactory.newDocumentBuilder(WebLogicDocumentBuilderFactory.java:140)
    at com.bea.security.xacml.policy.PolicyUtils.getRootNode(PolicyUtils.java:54)
    at com.bea.security.xacml.policy.PolicyUtils.read(PolicyUtils.java:86)
    at com.bea.security.providers.xacml.store.BasePolicyStore.getAbstractPolicy(BasePolicyStore.java:1251)
    at com.bea.security.providers.xacml.store.BasePolicyStore.readPolicy(BasePolicyStore.java:1231)
    at com.bea.security.providers.xacml.store.BasePolicyStore.readPolicy(BasePolicyStore.java:1114)
    at com.bea.security.providers.xacml.entitlement.PolicyManager.listPolicies(PolicyManager.java:747)
    at weblogic.security.providers.xacml.DeployableAuthorizationProviderV2Helper.startDeployPolicies(DeployableAuthorizationProviderV2Helper.java:90)
    at weblogic.security.providers.xacml.authorization.XACMLAuthorizationProviderImpl.startDeployPolicies(XACMLAuthorizationProviderImpl.java:269)
    at com.bea.common.security.internal.legacy.service.PolicyDeployerProviderImpl$V2Adapter.startDeployPolicies(PolicyDeployerProviderImpl.java:69)
    at com.bea.common.security.internal.service.PolicyDeploymentServiceImpl$DeploymentHandlerImpl.<init>(PolicyDeploymentServiceImpl.java:143)
    at com.bea.common.security.internal.service.PolicyDeploymentServiceImpl$DeploymentHandlerImpl.<init>(PolicyDeploymentServiceImpl.java:129)
    at com.bea.common.security.internal.service.PolicyDeploymentServiceImpl$ServiceImpl.startDeployPolicies(PolicyDeploymentServiceImpl.java:97)
    at weblogic.security.service.WLSPolicyDeploymentServiceWrapper$DeploymentHandlerImpl.<init>(WLSPolicyDeploymentServiceWrapper.java:70)
    at weblogic.security.service.WLSPolicyDeploymentServiceWrapper$DeploymentHandlerImpl.<init>(WLSPolicyDeploymentServiceWrapper.java:60)
    at weblogic.security.service.WLSPolicyDeploymentServiceWrapper.startDeployPolicies(WLSPolicyDeploymentServiceWrapper.java:40)
    at weblogic.security.service.AuthorizationManager.startDeployPolicies(AuthorizationManager.java:489)
    at weblogic.servlet.security.internal.WebAppSecurityWLS.<init>(WebAppSecurityWLS.java:72)
    at weblogic.servlet.security.internal.ServletSecurityManager.<init>(ServletSecurityManager.java:39)
    at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:416)
    at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:464)
    at weblogic.servlet.internal.HttpServer.loadWebApp(HttpServer.java:414)
    at weblogic.servlet.internal.WebAppModule.registerWebApp(WebAppModule.java:901)
    at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:345)
Run Code Online (Sandbox Code Playgroud)

java parsing xerces

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

Delphi XE中没有更多xercesxmldom单元?

我想知道该xercesxmldom单元作为XML DOM实现之一发生了什么.
它似乎在Delphi XE中消失了.
为什么?

(我搜索了文档;找不到关于xercesxmldom消失的任何相关信息).

编辑:这些是我存档的来源:

R:\>dir /s /b xercesxmldom.pas
R:\D2006-Enterprise-D10-BDS-4.0\source\Win32\xml\xercesxmldom.pas
R:\D2007-Enterprise-D11-RadStudio-5.0\source\Win32\xml\xercesxmldom.pas
R:\D2009-Enterprise-D12-RadStudio-6.0\source\Win32\xml\xercesxmldom.pas
R:\D2010-Enterprise-D14-RadStudio-7.0\source\Win32\xml\xercesxmldom.pas
R:\D7.01.Architect\Source\Xml\xercesxmldom.pas
Run Code Online (Sandbox Code Playgroud)

R:\DXE-Enterprise-D15-RadStudio-8.0源树中没有任何内容......

--jeroen

delphi xerces xmldom delphi-xe

6
推荐指数
1
解决办法
1609
查看次数

为什么org.apache.xerces.parsers.SAXParser不会跳过utf8编码的xml中的BOM?

我有一个带utf8编码的xml.此文件包含BOM作为文件的开头.所以在解析过程中我遇到了org.xml.sax.SAXParseException:prolog中不允许使用内容.我无法从文件中删除这3个字节.我无法将文件加载到内存中并在此处删除它们(文件很大).因此,出于性能原因,我正在使用SAX解析器,如果它们在""标记之前存在,则只想跳过这3个字节.我应该为此继承InputStreamReader吗?

我是java的新手 - 请告诉我正确的方法.

java byte-order-mark xerces

6
推荐指数
1
解决办法
5673
查看次数