2014-10-16 2 views
0

Я использую метод .find для получения значения тега xml. В моем xml, если xmltag повторяется, он дает мне значение всего тега. ПримерПолучение нескольких значений тегов при использовании метода find в jQuery

<Response> 
<Result>0</Result> 
<Message>Tenant Information fetched for tenantID=1</Message> 
<Data> 
    <Tenants> 
     <row> 
      <TenantID>1</TenantID> 
      <TenantTypeID>1</TenantTypeID> 
      <CardCode>CLINSH0184</CardCode> 
      <CustomerName>S. H. Pitkar Orthotools Pvt Ltd</CustomerName> 
      <CustomerGroup>VAT Customer</CustomerGroup> 
      <ServiceContract>69</ServiceContract> 
      <SUserID>S0004493123</SUserID> 
      <ContactPerson>Nupur Pitkar</ContactPerson> 
      <Phone1>123</Phone1> 
      <Phone2>456</Phone2> 
      <Mobile>789</Mobile> 
      <Email>[email protected]</Email> 
      <StartDate>2014-01-01T00:00:00</StartDate> 
      <EndDate>2015-01-01T00:00:00</EndDate> 
      <Active>1</Active> 
      <B1Version>8.82</B1Version> 
      <PatchLevel>12</PatchLevel> 
      <SqlVersion>2008</SqlVersion> 
      <ServiceURL>http://localhost:8932/CRMService.asmx</ServiceURL> 
      <DataBaseName>WTS</DataBaseName> 
      <ExpiredMessage>Subscription to this account is expired. Please contact System Administrator</ExpiredMessage> 
      <ExpirationMessage>Subscription to this account will expire soon. Please contact System Administrator</ExpirationMessage> 
      <WarningDays>3</WarningDays> 
      <logo>CLINSH0184.jpg</logo> 
      <LicenseDetails> 
       <row> 
        <ItemCode>SaaS-CRM-Sales</ItemCode> 
        <ItemName>SaaS - CRM Module-Sales</ItemName> 
        <StartDate>2014-07-15T00:00:00</StartDate> 
        <EndDate>2014-08-15T00:00:00</EndDate> 
        <License>1</License> 
       </row> 
       <row> 
        <ItemCode>SaaS-CRM-Purchase</ItemCode> 
        <ItemName>SaaS - CRM Module-Purchase</ItemName> 
        <StartDate>2014-07-15T00:00:00</StartDate> 
        <EndDate>2014-08-15T00:00:00</EndDate> 
        <License>2</License> 
       </row> 
       <row> 
        <ItemCode>SaaS-CRM-Service</ItemCode> 
        <ItemName>SaaS - CRM Module-Service</ItemName> 
        <StartDate>2014-07-15T00:00:00</StartDate> 
        <EndDate>2014-08-15T00:00:00</EndDate> 
        <License>3</License> 
       </row> 
      </LicenseDetails> 
     </row> 
    </Tenants> 
</Data> 

В упоминании XML, я использую ниже код, чтобы получить значение XML-тег.

var bindName='Response Data Tenants row StartDate'; 
$xmlNode = $xml.find(bindName); 
if ($xmlNode != null) { 
    var value = $xmlNode.text(); 
    //do some thing with code. 
    //here I am geting all value of xml tag start with 'StartDate' 
    //I am expecting value of only single node specified in bindName variable. 
} 

Может ли кто-нибудь помочь мне в этом контексте?

ответ

1

Если вы ищете только StartDate в узлах row, вы должны использовать прямой дочерний селектор вместо селектора потомок. Ваш последний селектор запрос должен быть:

var bindName='Response Data Tenants > row > StartDate';

Это исключит StartDate из LicenseDetails секций.

Имейте в виду, что если у вас есть несколько Tenants или несколько row разделов внутри одного Tenant вы все равно можете получить более одного результата и должен итерацию над ней с помощью .each():

$xmlNode = $xml.find(bindName); 
if ($xmlNode.length > 0) { 
    $xmlNode.each(function(index, item) { 
     console.log($(this).text()); 
    }); 
} 
+0

Спасибо Дерек, проблема решена. – Manish

1

Вам нужно указать строку, которую вы хотите, теперь она соответствует начальной дате в каждой строке.

Изменить

var bindName='Response Data Tenants row StartDate'; 

в

var bindName='Response Data Tenants row row:first StartDate'; 

соответствует первой строке.

Обновление Извините, обновлено, потому что я нашел элемент строки верхнего уровня тоже.

Смежные вопросы