XML फ़ाइल के php DOM में सीमांकक के बीच कैसे पढ़ा गया?




tags (2)

एक्सएसएलटी 2.0 / 3.0 में आसान पहले एक्सएमएल को अधिक समझदार संरचना में पुन: व्यवस्थित करें:

<xsl:template match="book">
<book>
  <xsl:for-each-group select="* except endpages" group-starting-with="page">
    <page n="{@n}">
      <xsl:copy-of select="current-group() except self::page"/>
    </page>
  </xsl:for-each-group>
</book>
</xsl:template>

फिर एक चयनित पृष्ठ को संसाधित करने के लिए:

<xsl:param name="page-num"/>
<xsl:template match="page[@n = $page-num]">
  <xsl:apply-templates/>
</xsl:template>

आप सक्सोन / सी प्रोसेसर का उपयोग करके PHP से XSLT 2.0 / 3.0 चला सकते हैं। निम्न स्तरीय डोम हेरफेर करने में कोई ज़रूरत नहीं है

मेरे पास कुछ एक्सएमएल फाइल हैं और मुझे उन्हें HTML में पढ़ना और कन्वर्ट करना है।

XML का प्रारूप यह है:

<book pages="2">

    <page n="1" />

    <entry>
        ...
    </entry>
    <entry>
        ...
    </entry>
    <entry>
        ...
    </entry>

    <page n="2" />

    <entry>
        ...
    </entry>
    <entry>
        ...
    </entry>
    <entry>
        ...
    </entry>

    <endpages />

</book>

मैं केवल एक पृष्ठ की प्रविष्टियों की सरणी कैसे निकाल सकता हूं?

अग्रिम में धन्यवाद!


मैंने अपनी मूल टिप्पणी में इसके लिए XPath का उपयोग करने का सुझाव दिया, फिर भी, मैं कुछ एक्सपीथ अभिव्यक्तियों के साथ following-sibling और preceding-sibling following-sibling संयोजन का प्रयोग करके खेल रहा हूं, लेकिन मैं इसे इस XML संरचना के साथ ठीक से काम नहीं कर सकता ।

यह करने का एक हैकी तरीके का एक सा है, किसी दिए गए पृष्ठ क्रमांक के बाद, और जब आप अगले <page /> या <endpages /> तत्व प्राप्त करते हैं तब सब कुछ प्राप्त करने के द्वारा।

$dom = new DOMDocument("1.0", "UTF-8");
$dom->load($xmlFile);

$xp = new DOMXPath($dom);

$pageNo = 2;

$list = $xp->query("/book/page[@n='" . $pageNo . "']/following-sibling::*");

foreach ($list as $node) {
    if ($node->nodeName == 'page' || $node->nodeName == 'endpages') {
        break;
    }

    echo $node->textContent . "<br />"; // <entry /> node
}

मुझे पूरा यकीन है कि यह बहुत अच्छी तरह से प्रदर्शन नहीं करेगा यदि आपके पास एक्सएमएल फ़ाइल में बहुत सारे पेज हैं और आप केवल एक पेज के तत्वों को लाने की कोशिश कर रहे हैं, लेकिन कोड की लाइनों के मुताबिक यह निगरानी रखता है और शायद किसी और को XPath अभिव्यक्ति को अनुकूलित करने के बारे में कुछ सुझाव हैं







tags