2016-11-22 3 views
0
var resposeXML='<?xml version="1.0" encoding="UTF-8"?> \ 
<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents"> \ 
<Timestamp>2016-11-21T13:53:57.509Z</Timestamp> \ 
<Ack>Success</Ack> \ 
<Version>991</Version> \ 
<Build>E991_INTL_APIXO_18185083_R1</Build> \ 
<PaginationResult> \ 
<TotalNumberOfPages>2</TotalNumberOfPages> \ 
<TotalNumberOfEntries>130</TotalNumberOfEntries> \ 
</PaginationResult> \ 
<HasMoreOrders>true</HasMoreOrders> \ 
<OrderArray> \ 
<Order> \ 
<OrderID>281928885737-1591172077018</OrderID><OrderStatus>Completed</OrderStatus><AmountPaid currencyID="INR">204.0</AmountPaid> \ 
</Order> \ 
</OrderArray> \ 
</GetOrdersResponse> '; 


var outputDocument = XmlService.parse(resposeXML); 
var rootEle=outputDocument.getRootElement(); 
Logger.log(resposeXML); 
Logger.log(" rootEle " + rootEle); 
Logger.log(" rootEle " + rootEle.getChild('Timestamp')); 
//alternately if i use index instead of name its returning the element 
Logger.log(" rootEle " + rootEle.getChildren()[0]); 
Logger.log(" rootEle " + rootEle.getChildren('Timestamp')); 
var Timestamp=rootEle.getChild("Timestamp").getText(); 



Logger.log(" rootEle " + rootEle.getChild('Timestamp')); 

этой линии возвращение нулевойУ меня возникли трудности с разбором XML. Google Appscript XMLSERVICE с использованием метода getchild (name), всегда возвращающего null?

попеременно, если я использовать индекс вместо имени его возвращение элемента, но я не нужно использовать индексировать каждый раз, когда для всех элементов в моем XML, как порядок элемента может отличаться есть некоторый элемент может пропустить некоторое время в другом порядке. например, индекс ack равен 1, если временной метки там нет 0.

поэтому мне нужно перейти по xml на основе имени элемента, а не индекса элемента.

, пожалуйста, помогите разобраться в проблеме.

Logger.log(" rootEle " + rootEle.getChildren()[0]); 

я попытался это ниже кода ничего не возвращает

Logger.log(" rootEle " + rootEle.getChildren('Timestamp')); 

Выход выглядит следующим образом

[16-11-21 22:38:42:923 PST] <?xml version="1.0" encoding="UTF-8"?> <GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents"> <Timestamp>2016-11-21T13:53:57.509Z</Timestamp> <Ack>Success</Ack> <Version>991</Version> <Build>E991_INTL_APIXO_18185083_R1</Build> <PaginationResult> <TotalNumberOfPages>2</TotalNumberOfPages> <TotalNumberOfEntries>130</TotalNumberOfEntries> </PaginationResult> <HasMoreOrders>true</HasMoreOrders> <OrderArray> <Order> <OrderID>281928885737-1591172077018</OrderID><OrderStatus>Completed</OrderStatus><AmountPaid currencyID="INR">204.0</AmountPaid> </Order> </OrderArray> </GetOrdersResponse> 
[16-11-21 22:38:42:923 PST] rootEle [Element: <GetOrdersResponse [Namespace: urn:ebay:apis:eBLBaseComponents]/>] 
[16-11-21 22:38:42:924 PST] rootEle null 
[16-11-21 22:38:42:927 PST] rootEle [Element: <Timestamp [Namespace: urn:ebay:apis:eBLBaseComponents]/>] 
[16-11-21 22:38:42:928 PST] rootEle 

Пожалуйста, помогите мне, где я делаю wrong.this имеет becom nighmare для меня

ответ

0

Ключевым здесь является использование пространства имен, указанного в документе:

var resposeXML = '... your XML ...'; 

    var outputDocument = XmlService.parse(resposeXML); 
    var rootEle = outputDocument.getRootElement(); 
    // grab the namespace definition from the root element 
    var ns = rootEle.getNamespace(); 

    Logger.log('Timestamp: ' + rootEle.getChild('Timestamp', ns).getText()); 
    // Timestamp: 2016-11-21T13:53:57.509Z 

Обратите внимание, как пространство имен, в переменной ns передается в качестве второго аргумента getChild('timestamp', ns).

Надеюсь, что это поможет