Java Stax를 사용하여 XML 처리 지침을 포맷하고 읽으려면 어떻게해야합니까?

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를 사용하여 처리 지침을 구문 분석하는 적절한 방법입니까? XMLStreamReader아피스?
  3. 어떻게 사용합니까? getPITarget() 그리고 getPIData() 여러 인수를 반환하려면?
도움이 되었습니까?

해결책

1. XML 형식이 정확합니까?

, 하지만 a 처리 명령 이 없습니다 속성 - 데이터 만. 속성처럼 보이는 것은 데이터의 일부이며 일부 사람들은 그들을 부릅니다. "pseudo-attributes".

2. 이것은 Stax XMLStreamReader API를 사용하여 처리 지침을 구문 분석하는 적절한 방법입니까?

예.

3. GetPitarget () 및 getPidata ()를 어떻게 사용하여 여러 인수를 반환합니까?

"다중 인수"에 의해 데이터에 포함 된 유사 아트 리 부처가 둘 이상의 의사를 의미한다면, 대답은 코드가 데이터를 구문 분석해야한다는 것입니다 (일부 표준 문자열 메소드를 C#으로 사용하여 사용합니다. split(), 모든 의사 attributes에 대한 이름 값 쌍 세트를 검색하십시오.

다른 팁

속성을 갖는 처리 지침에 대한이 개념은 일부 오래된 XML 매뉴얼에서 나온다고 생각합니다. 어느 시점에서 PI가 그러한 구조화를 존중하거나 요구하도록 권장하는 것에 대한 논의가있었습니다. 그러나 공식 XML 사양은 그러한 사용법을 의무화하거나 권장하지 않았습니다.

따라서 기본적으로 당신은 내용을 직접 구문 분석해야합니다. 어떤 형식의 형식 일지 모르지만 속성 표기법을 사용한다는 것을 알고 있다면 구문 분석 할 수 있습니다.

내가 아는 한, Java XML 파서 또는 가공 패키지 중 어느 것도 불행히도 그러한 사용을 지원하지 않습니다.

하지만 Dimitre의 대답 기술적으로 정확하며, 몇몇 인기있는 라이브러리는 현재 예상대로 처리 명령어를 구문 분석합니다. 후속 예제는 다음 XML 처리 명령어를 구문 분석하여 값을 얻습니다. href pseduo-attribute :

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

JDO2

사용 JDO2:

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