Как мне отформатировать и прочитать инструкции по обработке XML с использованием Java StAX? - PullRequest
2 голосов
/ 01 января 2009

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

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

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

getPITarget()
getPIData()

javadoc для этих двух методов не очень полезен.

  1. Правильно ли форматируется XML?
  2. Это правильный путь? инструкции по обработке парсинга используя StAX XMLStreamReader API-интерфейсы?
  3. Как использовать getPITarget() и getPIData() для возврата нескольких аргументов?

Ответы [ 3 ]

3 голосов
/ 01 января 2009

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

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

2. Это правильный способ анализа команд обработки с использованием API StAX XMLStreamReader?

Да.

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

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

0 голосов
/ 17 декабря 2016

Хотя ответ Димитра технически верен, несколько популярных библиотек теперь анализируют псевдоатрибуты инструкции обработки, как и следовало ожидать. Последующие примеры анализируют следующую инструкцию обработки 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" ) );
  }
}

Saxon

Использование Saxon :

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" ) );
  }
}
0 голосов
/ 10 февраля 2009

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

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

Насколько я знаю, к сожалению, ни один из синтаксических анализаторов Java или пакетов обработки не поддерживает такое использование.

...