2012-02-04 23 views
5

Benim categories.xml dosyasıConfuse Xpath İfadem ne olmalı?

<categories> 
    <root name="Cars -Vehicles" id="CV"></root> 
    <root name="Personals" id="PER"></root> 
    <root name="Real Estate" id="RE"></root> 
    <root name="Property For Rent" id="PFR"></root> 
    <root name="Community" id="COM"></root> 
</categories> 

aşağıda verilmiştir ve My attibutes.xml dosya ben categoriesDropDown seçiminde benim attributeDropdown bağlı

<attributes> 

    <attribute value="ethnicity=ethnicity_african_american" name ="American Indian" categoryid="PER"/> 
    <attribute value="ethnicity=ethnicity_asian_pacific_islander" name ="Asian - Pacific Islander" categoryid="PER"/> 
    <attribute value="ethnicity=ethnicity_caucasian" name ="Caucasian" categoryid="PER"/> 


    <attribute value="amenities=amenities_ac" name ="AC" categoryid="RE, PFR"/> 
    <attribute value="amenities=amenities_alarm" name ="Alarm" categoryid="RE, PFR"/> 

</attributes> 

aşağıda verilmiştir. Kod

protected void ddCategories_SelectedIndexChanged(object sender, EventArgs e) 
{ 
      XmlDataSource xd = new XmlDataSource(); 
      xd.DataFile = Server.MapPath("Xmls") + "\\attributes.xml"; 
      xd.XPath = "/attributes/attribute[@categoryid='" + 
         categoriesDropDown.SelectedValue.ToString() + "']"; 

      attributeDropdown.DataSource = xd; 
      attributeDropdown.DataTextField = "name"; 
      attributeDropdown.DataValueField = "value"; 

      attributeDropdown.DataBind(); 

     // categoriesDropDown.DataTextField = "name"; 
     // categoriesDropDown.DataValueField = "id"; 

} 

aşağıda verilmiştir Şimdi problem ACadında iki özellik veEmlak iki kategoride olan Alarm olduğunu ve Mülkiyet Kiralık için. Bu kategorilerin seçiminde bu özellikleri nasıl bağlarım?

Öznitelikler birden çok kategoride bulunuyorsa, niçin Xpath İfadem olmalı?

cevap

1

Belki iyi bir çözüm değildir, ancak contains fonksiyonunu kullanabilirsiniz, ör .:

/attributes/attribute[contains(@categoryid, 'category')] 

Kodunuzdaki göre:

xd.XPath = string.Format("/attributes/attribute[contains(@categoryid, '{0}')]", 
    categoriesDropDown.SelectedValue);