3

ここで読んでいるいくつかのxmlがあります。

<application>
    <client>website</client>
    <register>
        <name>
            <first>Tommy</first>
            <second>Jay</second>
        </name>
        <address>
            <firstLine>line1</firstLine>
            <secondLine>line2</secondLine>
            <city>city1</city>
            <county>county1</county>
            <postcode>YY12 9UY</postcode>
        </address>
    </register>
</application>

とにかく、以下のようにxmlStreamReaderで読むと

public XMLElementALT getNextElement()
{
    element = new XMLElementALT();
    int event;
    try
    {
        event = reader.next();
    } 
    catch (XMLStreamException ex)
    {
        return null;
    }

    if (event == XMLStreamConstants.START_ELEMENT)
    {
        element.setTag(reader.getLocalName());
    }
    else if (event == XMLStreamConstants.CHARACTERS)
    {
        element.setAttribute(reader.getText());
    }
    else if (event == XMLStreamConstants.END_ELEMENT)
    {
        element.setEndTag(reader.getLocalName());
    }
    else if (event == XMLStreamConstants.END_DOCUMENT)
    {
        element.setFinished();
    }
    return element;
}

これで万事うまくいく!しかし、私が抱えている問題は、タグを読み取った後に取得する次のイベントがイベント XMLStreamConstants.CHARACHTERS であり、タグと次のタグの間のスペースである属性("\n")があることを報告することです。どうすればこれを削除できますか? 次のイベントを XMLStreamConstants.START_ELEMENT として使用したいと考えています。XML をすべて 1 行に入れることができることはわかっていますが、入力時にギャップを設けて、構造を確認できるようにしたいと考えています。また、検証するxsdがあり、これによりxmlが正常に検証されます.xsdでスペースを削除するためにできることはありますか?

ありがとう

4

1 に答える 1

3

メソッド内で、またはリーダーの作成時にフィルターを使用して、CHARACTERS空白のみを含むイベントを無視できます。getNextElement

XMLInputFactory factory = XMLInputFactory.newFactory();
XMLStreamReader rawReader = factory.createXMLStreamReader(...);
XMLStreamReader filteredReader = factory.createFilteredReader(rawReader,
  new StreamFilter() {
    public boolean accept(XMLStreamReader r) {
      return !r.isWhiteSpace();
    }
  });

現在のイベントが完全に空白で構成されるisWhiteSpaceイベントである場合、メソッドはtrueを返します。イベントでない場合、またはすべての空白ではCHARACTERSない場合はfalseを返します。CHARACTERSCHARACTERS

ただし、 1つのイベントで要素のすべてのテキストコンテンツを返すことが保証されているわけXMLStreamReaderではないことに注意してください。自分で連結する必要のあるいくつかの個別の文字ブロックを提供できます。CHARACTERS

于 2012-08-09T11:09:15.507 に答える