2009-06-12 12 views
6

aşağıdaki XML Verilen:XMLSearch ile XML öğesi içinde arama yapmak için doğru veya yanlış yol?

<cfsavecontent variable="xml"> 
<root> 
    <parent> 
     <child>I'm the first</child> 
     <child>Second</child> 
     <child>3rd</child> 
    </parent> 
    <parent> 
     <child>Only child</child> 
    </parent> 
    <parent> 
     <child>I'm 10</child> 
     <child>I'm 11!</child> 
    </parent> 
</root> 
</cfsavecontent> 

bu her ebeveyn üzerinde döngü için en iyi yol ve sonra o ebeveynden tüm çocukları ayıklamak?

<cfset xml = XMLParse(Trim(xml))> 

<cfset parents = XMLSearch(xml, "//parent")> 

<cfloop array="#parents#" index="parent"> 

    <cfset parent = XMLParse(parent)><!--- Is this needed? ---> 

    <cfset children = XMLSearch(parent, "//child")> 

    <cfloop array="#children#" index="child"> 
     <cfoutput>#child.XmlText#</cfoutput> 
    </cfloop> 

</cfloop> 

Sormamın nedeni, şu andaki XML öğesinden tüm alt öğeleri ayıklayamadığım için olmasıdır.

'Bu gerekli mi?' Yorum, ilerleyen satır çalışmasını yapmak için eklediğim satırı vurgular. Ancak bu satırı kaldırmak ve bir şekilde 'XMLSearch (ebeveyn, "// çocuk")' u sadece 'ana' alt öğeden çocuk öğeleri almak için değiştirmek mümkün mü?

Teşekkürler.

+0

+1 - Gerçekten CF görünmüyor o tür karşı-sezgisel XmlSearch() içinde onur içeriği. – Tomalak

cevap

8
<cfset parent = XMLParse(parent)><!--- Is this needed? ---> 

Hayır, öyle değil. Bu bir performans cezası bile, çünkü bu şekilde yeni bir DOM yaratıyorsunuz.

XmlSearch()'dan bir dizi XML düğümü alırsınız (neden başka <cfloop array... kullanıyorsunuz?). Bu durum, bu eşdeğer olmalıdır anlamı: bir düğüm ararken

<!-- new CF8 syntax --> 
<cfloop array="#parents#" index="parent"> 
    <cfdump var="#parent#"> 
</cfloop> 

<!-- old syntax --> 
<cfloop from="1" to="#ArrayLen(parents)#" index="i"> 
    <cfdump var="#parents[i]#"> 
</cfloop> 

ColdFusion onur bağlamını yapmak için tek yapmanız gereken: Eğer "//" ile bir XPath ifadesi başlatırsanız

XMLSearch(parent, ".//child") 
-------------------^ 

, ColdFusion besbelli bütününü arar düğümün ait olduğu belge, sadece o düğümün soyundan değil.

Ama belgeden tüm<child> unsurları çıkışı ilgileniyorsanız, neden yerine bunu:

<cfset children = XMLSearch(xml, "//child")> 
+0

Yup, bunu anlıyorum, ancak bu ana düğümler üzerinde döngü yaparken her birinde arama yapmak istiyorum. Bu hattın bir sürümü ile gelip yapamaz oldum ... ... ben de düşündüm, dönüş 'ebeveyn' dan Bir XML Öğesine bir XML Öğesi ve daha sonra XPath daha kolaydır. –

+0

Üzgünüz, ilk taslağınıza göre yorum yaptı. Tüm alt öğeleri istiyorum, ancak yalnızca geçerli ebeveyn için. –

+0

Döngüde ".//child" aramayı deneyin. "// çocuk" ifadesi, "." Den başlayarak, doküman genelinde bir arama tetikler. onur içeriği. – Tomalak

İlgili konular