كيف يمكنني تنسيق قراءة XML معالجة تعليمات باستخدام جافا ستاكس?

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

  •  03-07-2019
  •  | 
  •  

سؤال

أولا كيف يمكنني تنسيق XML تعليمات المعالجة ، هو:

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

باستخدام ستاكس ، ثم تريد أن تقرأ ذلك من خلال التعامل مع XMLStreamConstants.PROCESSING_INSTRUCTION (جافادوك) حدث, ولكن هذا فقط يوفر طريقتين ثم استرجاع المعلومات حول معالجة التعليمات من XMLStreamReader:

getPITarget()
getPIData()

على جافادوك هذه الطريقتين ليست مفيدة جدا.

  1. هو تنسيق XML الصحيح ؟
  2. هل هذا هو الطريق الصحيح للذهاب حول تحليل معالجة التعليمات باستخدام ستاكس XMLStreamReader واجهات برمجة التطبيقات ؟
  3. كيف يمكنني استخدام getPITarget() و getPIData() العودة متعددة الحجج ؟
هل كانت مفيدة؟

المحلول

1.هو تنسيق XML الصحيح ؟

نعم, ومع ذلك ملاحظة أن تعليمات المعالجة لا سمات - فقط البيانات.ما يشبه الصفات هي جزء من البيانات وبعض الناس يطلق عليهم "pseudo-attributes".

2.هل هذا هو الطريق الصحيح للذهاب حول تحليل معالجة تعليمات باستخدام ستاكس XMLStreamReader واجهات برمجة التطبيقات ؟

نعم.

3.كيف يمكنني استخدام getPITarget() و getPIData() للعودة متعددة الحجج ؟

إذا كان "حجج متعددة" تعني ربما أكثر من واحد الزائفة الصفات الواردة في البيانات, الجواب هو أن التعليمات البرمجية الخاصة بك يجب تحليل البيانات (استخدام بعض سلسلة القياسية أساليب مثل C# split(), و استرداد مجموعة اسم أزواج قيمة لجميع الزائفة الصفات.

نصائح أخرى

أعتقد أن هذا مفهوم معالجة تعليمات وجود سمات يأتي من بعض xml الأدلة.عند نقطة واحدة كانت هناك مناقشة التوصية PIs إلى شرف أو تتطلب مثل هذه الهيكلة.ومع ذلك ، فإن الرسمية مواصفات xml لم تكليف أو حتى أوصى هذا الاستخدام.

وذلك أساسا لديك تحليل محتويات نفسك -- أنها قد تكون في أي شكل ، ولكن إذا كنت تعرف أنه يستخدم السمة التدوين يمكنك تحليل ذلك.

بقدر ما أعرف, لا جافا موزعي xml أو معالجة حزم دعم هذا الاستخدام ، لسوء الحظ.

على الرغم من أن Dimitre الجواب هو الصحيح من الناحية الفنية قليلة شعبية المكتبات الآن تحليل معالجة التعليمات الزائفة الصفات كما هو متوقع.اللاحقة أمثلة تحليل XML التالية معالجة التعليمات للحصول على قيمة href pseduo-السمة:

<?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