标签: xmlstreamreader

XMLStreamReader和XMLEventReader有什么区别?

我浏览网页.我发现XMLStreamReader用于解析XML的Cursor样式API.而XMLEventReader的迭代器风格的API用于解析XML .Could任何一个详细的告诉我?

java xml stax xml-parsing xmlstreamreader

9
推荐指数
1
解决办法
4567
查看次数

StAX XML两个必需标记之间的所有内容

使用XMLStreamReader开始学习StAX,我遇到了一些问题.如何将标签之间的所有内容作为文本?我的意思是,我知道所需标签的名称,当我找到它时,我必须转到关闭标签,我发现它们之间的所有内容我必须附加一些字符串.例如,我们有类似的东西

<rootTag>
...    
    <someTag>
        Some text content and other tags here…
    </someTag >
    <tagINeed>
        <someinternalTag1>
            <someinternalTag11>
                Some text content..
            </someinternalTag11>
            ...
        </someinternalTag1>
        <someinternalTag2>
            Something here
        </someinternalTag2>
    </tagINeed>
...
    <somethingAnother>
...
    </somethingAnother >
...
</rootTag>    
Run Code Online (Sandbox Code Playgroud)

所以,我需要把我的字符串作为

        <someinternalTag1>
            <someinternalTag11>
                Some text content..
            </someinternalTag11>
            ...
        </someinternalTag1>
        <someinternalTag2>
            Something here
        </someinternalTag2>
Run Code Online (Sandbox Code Playgroud)

我怎么才能得到它?也许,我必须在源xml中找到所需块的开始和结束偏移,并在解析后给出子串?

java xml stax xml-parsing xmlstreamreader

8
推荐指数
1
解决办法
6530
查看次数

如何使用失败的xsd验证获取无效的xml文件的元素

我目前正在使用我的XSD来验证我的xml.这部分工作正常我的问题是我想要获取无效的标签/值的元素.

    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xml));
    XMLStreamReader reader = null;
    SchemaFactory factory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = factory.newSchema(xsdschemalocation);
    Validator validator = schema.newValidator(); 
    try
    {
        reader = XMLInputFactory.newInstance().createXMLStreamReader(new StreamSource(new StringReader(xml)));
    } catch (XMLStreamException ex)
    {
        LogController.getLogger().logSEVERE("Unable to create the streamreader from the xml source", ex.getLocalizedMessage());
        return false;
    }
    try
    {
        validator.validate(new StAXSource(reader));
    }
    catch (IOException ex)
    {
        LogController.getLogger().logSEVERE("IOException in the validatation has been caused as the reader has become null", ex.getLocalizedMessage());
        return false;
    }
catch(SAXException saxe)
    {
        LogController.getLogger().logWARNING("Their is a validation …
Run Code Online (Sandbox Code Playgroud)

java xml exception xmlstreamreader

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

将Java w3c Document转换为XMLStreamReader

我想在我们的代码库中重用一些现有的代码来接受XMLStreamReader我的应用程序将所需的数据作为w3c文档.

以下示例是最小测试用例:

public static void main(String[] args) throws Exception {
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = builderFactory.newDocumentBuilder();

    Document doc = builder.newDocument();

    Element rootElement = doc.createElement("Groups");
    doc.appendChild(rootElement);
    Element group = doc.createElement("Group");
    group.setTextContent("Wibble");
    rootElement.appendChild(group);

    DOMSource source = new DOMSource(doc);

    XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(source);

    reader.nextTag();
    System.out.println("NextTag:" + reader.getName());
}
Run Code Online (Sandbox Code Playgroud)

预期的输出应该是这样的:NextTag:Groups但是抛出以下内容:

Exception in thread "main" javax.xml.stream.XMLStreamException: java.net.MalformedURLException
    at com.sun.xml.stream.XMLReaderImpl.setInputSource(XMLReaderImpl.java:196)
    at com.sun.xml.stream.XMLReaderImpl.<init>(XMLReaderImpl.java:179)
    at com.sun.xml.stream.ZephyrParserFactory.createXMLStreamReader(ZephyrParserFactory.java:139)
    at Main.main(Main.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.net.MalformedURLException …
Run Code Online (Sandbox Code Playgroud)

java xml stax xmlstreamreader

5
推荐指数
1
解决办法
5959
查看次数

从OMElement对象获取InputStream/io.Reader

我有一个OMElement对象,我希望得到一个InputStream或一个读者对象.我想要的是xmlOMElement我拥有的流中流,而不是加载到内存中.我只能XMLStreamReader从那里获得对象.但我找不到办法InputStream/Reader摆脱这种局面.

OMElement element /*I have this object */
XMLStreamReader xmlreader = element.getXMLStreamReaderWithoutCaching();
Run Code Online (Sandbox Code Playgroud)

谁能帮帮我吗 ?我真的很感激!

谢谢

PS:我已经找到了一个获取InputStream的方法,但它提供了一个异常,我需要帮助来解决它.

XMLStreamReader xmlReader = element.getXMLStreamReader(false);

  try {
      if (xmlReader.getEventType() == XMLStreamReader.START_DOCUMENT) {
                xmlReader.next();
       }
      DataHandler handler = XMLStreamReaderUtils.getDataHandlerFromElement(xmlReader);
      handler.getInputStream();
Run Code Online (Sandbox Code Playgroud)

对getDataHandlerFromElement的调用生成异常javax.xml.stream.XMLStreamException:base64解码期间出错

java xml axiom xmlstreamreader

5
推荐指数
1
解决办法
1458
查看次数

Java XMLStreamReader,当文本包含 START_ELEMENT 时如何获取元素文本

如果我有一个 XML 元素,例如:

<title>this is a title</title>
Run Code Online (Sandbox Code Playgroud)

使用 XMLStreamReader 很容易获得文本。getElementText(). 但是,如果遇到这样的元素,我无法弄清楚如何获取文本:

<title>this is a <othertag>title with another</othertag> tag inside of it</title>
Run Code Online (Sandbox Code Playgroud)

我什至不确定那是否是有效的 XML,但它似乎通过了我试过的 W3C 验证器。根据API 文档getElementText()如果您要在START_ELEMENT内部遇到另一个事件,则不能使用来获取文本。那么...可以使用?

java xml parsing xml-parsing xmlstreamreader

5
推荐指数
1
解决办法
6402
查看次数

Java XMLStreamReader不能具有更高Unicode平面的属性值吗?

让我们创建一个包含两个属性值的XML文件,其中包含一个扩展的unicode char

XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();

try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ERROR_XML), "UTF-8"))) {
XMLStreamWriter xmlStreamWriter = outputFactory.createXMLStreamWriter(writer);

xmlStreamWriter.writeStartDocument();
xmlStreamWriter.writeCharacters("\n");
xmlStreamWriter.writeStartElement("start");
xmlStreamWriter.writeAttribute("test1", "11");
xmlStreamWriter.writeAttribute("test2", "22");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeEndDocument();
}
Run Code Online (Sandbox Code Playgroud)

生成的文件如下所示:

<?xml version="1.0" ?>
<start test1="11" test2="22"></start>
Run Code Online (Sandbox Code Playgroud)

如果再次读入并检查属性值

XMLInputFactory inputFactory = XMLInputFactory.newInstance();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(ERROR_XML), "UTF-8"))) {
XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(reader);

xmlStreamReader.nextTag();
if (XMLStreamReader.START_ELEMENT == xmlStreamReader.getEventType() &&
    "start".equals(xmlStreamReader.getLocalName())) 
{
    System.out.println(xmlStreamReader.getAttributeValue(0));
    System.out.println(xmlStreamReader.getAttributeValue(1));
}}
Run Code Online (Sandbox Code Playgroud)

这将打印

11
22
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,第二个属性值包含2次扩展的unicode char!

以下任何使用扩展char作为属性值都会增加此计数.在一个案例中,我收到了12000个相同字符的属性值,而不是一个.这里发生了什么?

java unicode attributes xmlstreamreader

5
推荐指数
1
解决办法
653
查看次数

将XML Feed读入XElement

我有一个我想阅读的Xm​​l Stream XElement.我见过使用的样品,XmlTextReader但我需要它XElement.

我到目前为止的代码:

string url = 
 String.Format( "http://dev.virtualearth.net/REST/v1/Locations/{0}?o=xml&key={1}", HttpUtility.UrlEncode( AddressQuery ), mapkey );

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;  

XmlTextReader reader = new XmlTextReader( url );
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何让读者进入XElement.也许我会以错误的方式去做.

c# xml xelement bing-maps xmlstreamreader

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

我们如何使用XMLEventReader解析DOCTYPE信息?

我有一些现有的代码可以解析顶级元素名称空间以确定我们正在查看哪种 XML 文件。

XMLEventReader reader = createXMLEventReader(...);
try {
    while (reader.hasNext()) {
        XMLEvent event = reader.nextEvent();
        switch (event.getEventType()) {
            case XMLStreamConstants.DTD:
                // No particularly useful information here?
                //((DTD) event).getDocumentTypeDeclaraion();
                break;

            case XMLStreamConstants.START_ELEMENT:
                formatInfo.qName = ((StartElement) event).getName();
                return formatInfo;

            default:
                break;
        }
    }
} finally {
    reader.close();
}
Run Code Online (Sandbox Code Playgroud)

如果我允许解析器从 Web 加载 DTD,getDocumentTypeDeclaraion()则包含一个巨大的字符串,其中包含的信息比我知道如何处理的信息多,因为它在移交字符串之前将所有相关的 DTD 插入到该字符串中。另一方面,如果我阻止解析器从 Web 加载 DTD(出于显而易见的原因,无论如何这是更好的选择),它只会给我字符串"<!DOCTYPE".

有没有办法取回 DOCTYPE 内的值?

我正在使用 JRE 附带的默认解析器,以防万一。

java xml dtd xmlstreamreader

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

如何使用xmlStreamReader将XML文件的完整内容作为String获取?

我是一个应用程序的一部分,我可以访问xmlStreamReader它,表示需要完全读入的XML文件String.

有没有办法获得XML内容而无需xmlStreamReader文件上构建另一个或使用另一个流?

java string file xml-parsing xmlstreamreader

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

java.net.MalformedURLException:使用 JAXB 时没有带有 javax.xml.stream.XMLStreamException 的协议

我正在使用 JAXB 来解组 XML 文档。解析 XML 时,它会抛出用 XMLStreamException 包装的 MalformedURLException。我的理解是,在创建 XMLStreamReader 对象本身时,它会抛出异常。请问有什么建议吗?

我正在使用的代码片段:

    XMLInputFactory xif = XMLInputFactory.newFactory();      
    XMLResolver resolver = new XMLResolver(); //to capture systemID, base URI etc.
    xif.setXMLResolver(resolver);

    //Throws MalformedURLException  while processing the below line
    XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(fileToProcess));

    JAXBContext jaxbContext = JAXBContext.newInstance(MyPackage.MyClassName.class);
Run Code Online (Sandbox Code Playgroud)

这是异常跟踪:

     class javax.xml.stream.XMLStreamException
     javax.xml.stream.XMLStreamException: java.net.MalformedURLException: no protocol:       [XML_FILEPATH/XML_FILE_NAME]
Run Code Online (Sandbox Code Playgroud)

fileToProcess是包含绝对路径的字符串,例如 /home/project/input/myproject.xml

运行时 JDK 是 1.7。我缺少任何签名/协议吗?

谢谢,巴斯卡

xml jaxb malformedurlexception xml-parsing xmlstreamreader

2
推荐指数
1
解决办法
9362
查看次数

如何使用XMLStreamReader读取xml中的命名空间?

我有一个xml文件,我使用XMLStreamReader对象从中读取.所以我会保持简单:

我们来看看这个xml示例:

<mySample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attribute1="value1"/>
Run Code Online (Sandbox Code Playgroud)

所以我需要的是获取值(作为字符串)"xmlns:xsi"并获取值(也作为字符串)" http://www.w3.org/2001/XMLSchema-instance "

我确实试过这样的测试:

if (reader.getEventType() != XMLStreamConstants.NAMESPACE){
       attributeName = reader.getAttributeLocalName(i);
       attributeValue = reader.getAttributeValue(i);
}
else{
       attributeName = reader.getNamespacePrefix(i) + reader.getNamespaceURI(i);
       attributeValue = reader.getAttributeValue(i);
}
Run Code Online (Sandbox Code Playgroud)

但它没有用.

显然我错过了这个API的新手,所以任何帮助都会非常受欢迎.

java xml stax xmlstreamreader

2
推荐指数
1
解决办法
4027
查看次数