Как форматировать и читать инструкции по обработке XML с помощью Java StAX?

StackOverflow https://stackoverflow.com/questions/404141

  •  03-07-2019
  •  | 
  •  

Вопрос

Во-первых, как мне отформатировать инструкцию обработки XML? Это:

<?processingInstructionName attribute="value" attribute2="value2"?>

Используя StAX, я затем хочу прочитать его, обработав XMLStreamConstants.PROCESSING_INSTRUCTION (Javadoc) событие, но оно предоставляет только два метода для последующего получения информации об инструкции обработки из XMLStreamReader:

getPITarget()
getPIData()

А Javadoc эти два метода не очень полезны.

  1. Правильно ли форматирование XML?
  2. Это правильный способ провести инструкции по обработке анализа с использованием Stax XMLStreamReaderAPI?
  3. Как мне использовать getPITarget() и getPIData() вернуть несколько аргументов?
Это было полезно?

Решение

1.Правильно ли форматирование XML?

Да, однако обратите внимание, что инструкция обработки не имеет атрибуты -- только данные.То, что выглядит как атрибуты, является частью данных, и некоторые люди называют их «pseudo-attributes".

2. Правильный ли это способ анализа инструкций обработки с использованием API-интерфейсов StAX XMLStreamReader?

Да.

3.Как использовать getPITarget() и getPIData() для возврата нескольких аргументов?

Если под «множественными аргументами» вы подразумеваете, возможно, более одного псевдоатрибута, содержащегося в данных, ответ заключается в том, что ваш код должен анализировать данные (используя некоторые стандартные строковые методы, такие как C# split(), и получите набор пар имя-значение для всех псевдоатрибутов.

Другие советы

Я думаю, что идея обработки инструкций, имеющих атрибуты, взята из некоторых старых руководств по XML.В какой-то момент обсуждалась необходимость рекомендовать ИП соблюдать или требовать такого структурирования.Однако официальная спецификация XML никогда не требовала и даже не рекомендовала такое использование.

Так что, по сути, вам придется анализировать содержимое самостоятельно — оно может быть в любом формате, но если вы знаете, что оно использует нотацию атрибутов, вы можете его проанализировать.

Насколько мне известно, ни один из XML-парсеров или пакетов обработки Java, к сожалению, не поддерживает такое использование.

Хотя Ответ Дмитрия технически правильно, несколько популярных библиотек теперь анализируют псевдоатрибуты инструкций обработки, как и следовало ожидать.В последующих примерах анализируется следующая инструкция обработки XML, чтобы получить значение для href псевдоатрибут:

<?xml-stylesheet type="text/xsl" href="markdown.xsl"?>

JDOM2

С использованием JDOM2:

import org.jdom2.ProcessingInstruction;
import org.xml.sax.helpers.DefaultHandler;

public class ProcessingInstructionHandler extends DefaultHandler {

  @Override
  public void processingInstruction( final String target, final String data ) {
    final ProcessingInstruction pi = new ProcessingInstruction( target, data );
    System.out.println( pi.getPseudoAttributeValue( "href" ) );
  }
}

саксонский

С использованием саксонский:

import static net.sf.saxon.tree.util.ProcInstParser.getPseudoAttribute;
import org.xml.sax.helpers.DefaultHandler;

public class ProcessingInstructionHandler extends DefaultHandler {

  @Override
  public void processingInstruction( final String target, final String data ) {
    System.out.println( getPseudoAttribute( data, "href" ) );
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top