هل هناك أي طريقة لاسترداد التعليقات من ملف XML؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

هل هناك أي طريقة لاسترداد التعليقات من ملف XML؟

ولدي ملف XML، مع التعليقات في ذلك، ولدي لبناء التعليقات المرتبطة واجهة المستخدم استنادا إلى كل عقدة في هذا الملف، و.

وأنا لا يمكن أن يبدو لايجاد وسيلة للحصول على تلك التعليقات. وكنت قادرا على الحصول على 'بعض' من لهم باستخدام simpleXML، لكنها لم تنجح لعقدة الجذر، وكان يتصرف غريبة جدا ... وضعت بعض التعليقات في عقدة الخاصة بهم، وتركت بعض البعض والطفل، وجميع تم تعليق وضعت في نفس العقدة ... لست متأكدا هذا يجعل من أي معنى :) وهذه النقطة هي simpleXML كسر هيكل التعليقات وأنه لم يكن جيدا لاحتياجاتي.

هل كانت مفيدة؟

المحلول

ويمكنك استخدام XmlReader لقراءة كافة العقد وسحب التعليقات. لقد تضمنت بعض نموذج التعليمات البرمجية للحصول على انك بدأته، لأنها تسحب للتو العقد، ولا يأخذ في الاعتبار <م> حيث التعليق هو في الداخل، تحت أو فوق أي العقد XML.

$comments = '';
$xml =<<<EOX
<xml>
    <!--data here -->
    <data>
        <!-- more here -->
        <more />
    </data>
</xml>
EOX;

$reader = new XMLReader();
$reader->XML($xml);

while ($reader->read()) {
  if ($reader->nodeType == XMLReader::COMMENT) {
      $comments .= "\n".$reader->value;
  }
}

$reader->close();

echo "all comments below:\n-------------------".$comments

والناتج المتوقع هو:

all comments below:
-------------------
 data here
 more here

وهكذا سيتم اتخاذها فقط قيم التعليقات (لا <!-- -->)، وكذلك المسافات.

نصائح أخرى

وsimpleXml هو جيد لاقتناص السريع لشيء، ولكن له حدود. استخدام محلل DOM بدلا من ذلك. أو في هذه الحالة، ربما نظام قائم على الحدث (SAX أو XmlReader).

وانها بسيطة إذا كنت تستخدم كسباث. وظيفة comment() مباريات التعليقات. وبالتالي فإن نمط

//comment()

ويجد كل التعليقات الواردة في هذه الوثيقة.

في XSLT، عن النمط العام حيث يسبق تعليق العنصر الذي كنت تحويل، منها مثلا:

<!-- This is the comment -->
<element>...

وكنت تستخدم قالب مثل:

<xsl:template match="*[.::preceding-sibling()/comment()]">
   <xsl:variable name="comment" select=".::preceding-sibling()/comment()"/>
   <!-- xsl:value-of $comment will now give you the text of the comment -->
   ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top