इस लेख का मॉड्यूल: Integration Flow Helper
Sample payload से SAP CPI XPath: XML और JSON से XML
SAP CPI के Content Modifier, Router, Filter और Splitter के लिए sample payload से XPath लिखें: XML paths, namespaces, और JSON to XML Converter के root element के ज़रिए JSON।

XPath वह तरीका है जिससे SAP CPI किसी XML message से value पढ़ता है: property के लिए order number, Router condition के लिए status, Splitter के लिए दोहराया जाने वाला node। इसे सही लिखने का सबसे तेज़ तरीका interface के विवरण से नहीं, बल्कि payload के असली sample से शुरू करना है।
यह लेख बताता है कि iFlow में XPath कहाँ इस्तेमाल होता है, XML sample से paths कैसे निकालें, namespaces कैसे काम करते हैं, और JSON payloads XML में कैसे बदलते हैं, जिसमें यह भी शामिल है कि उनके paths /root से क्यों शुरू होते हैं।
iFlow में XPath कहाँ इस्तेमाल होता है
- Content Modifier: XPath source type वाली header या property row body से value पढ़ती है। Data type तय करता है कि आपको text मिलेगा, जैसे
java.lang.String, या nodes। - Router और Filter: XML conditions XPath expressions होती हैं, जैसे
/Orders/Order/Status = 'OPEN'। - Splitter: XPath expression दोहराए जाने वाले node को चुनता है, हर node के लिए एक message।
- Gather, Aggregator और Content Enricher: XPath उन nodes की ओर इशारा करता है जिन्हें मिलाया, correlate या enrich किया जाता है।
ये सभी उस step पर body जैसी है, उसी पर चलते हैं। किसी mapping या converter के बाद, structure के साथ paths भी बदल जाते हैं।
XML sample से XPath तक
यह दो orders वाला एक छोटा sample है:
<Orders>
<Order status="OPEN">
<Id>4711</Id>
<Customer id="C-100">ACME</Customer>
<Amount currency="EUR">1250.00</Amount>
</Order>
<Order status="CLOSED">
<Id>4712</Id>
<Customer id="C-200">Globex</Customer>
<Amount currency="EUR">80.00</Amount>
</Order>
</Orders>| XPath | Sample पर नतीजा |
|---|---|
/Orders/Order/Id | सभी order IDs: 4711 और 4712 |
/Orders/Order[@status='OPEN']/Id | खुले orders की IDs: 4711 |
/Orders/Order[1]/Customer/@id | पहले order की customer ID: C-100 |
count(/Orders/Order) | orders की संख्या: 2 |
/Orders/Order[Amount > 1000] | 1000 से ज़्यादा राशि वाले orders |
/ से शुरू होने वाला path root से शुरू होता है; //Id कहीं भी मौजूद Id elements ढूँढता है, जो सुविधाजनक है लेकिन बड़े payloads पर धीमा है।
Namespaces
अगर payload के elements किसी namespace में हैं, तो बिना prefix वाला path कुछ नहीं ढूँढता। iFlow की Runtime Configuration में Namespace Mapping के अंतर्गत हर namespace के लिए एक prefix घोषित करें, xmlns:ord=http://example.com/orders के रूप में, और उसे हर step में इस्तेमाल करें: /ord:Orders/ord:Order/ord:Id।
आपके mapping का prefix payload के prefix से मेल खाए, यह ज़रूरी नहीं; केवल namespace URI मेल खानी चाहिए। जो XPath साफ़ दिख रहे payload पर कुछ नहीं लौटाता, उसकी वजह आमतौर पर गायब Namespace Mapping होती है।
JSON payloads: JSON to XML Converter के ज़रिए XPath
XPath XML पर काम करता है, इसलिए JSON message को पहले JSON to XML Converter से बदला जाता है। कई members वाले JSON object का कोई एक root element नहीं होता, इसलिए converter का Add XML Root Element option उसे एक root में लपेट देता है, जिसका default नाम root है। तब paths /root से शुरू होते हैं, और array का हर item array के नाम वाला एक दोहराया गया element बन जाता है:
{
"orderId": "4711",
"customer": { "id": "C-100", "name": "ACME" },
"items": [
{ "sku": "A-1", "qty": 2 },
{ "sku": "B-7", "qty": 1 }
]
}
JSON to XML Converter (root element: root)
<root>
<orderId>4711</orderId>
<customer><id>C-100</id><name>ACME</name></customer>
<items><sku>A-1</sku><qty>2</qty></items>
<items><sku>B-7</sku><qty>1</qty></items>
</root>
/root/orderId 4711
/root/customer/name ACME
/root/items/sku A-1, B-7
/root/items[qty > 1]/sku A-1अगर आप converter में root का नाम बदलते हैं, तो हर path का पहला step भी उसी के अनुसार बदलें। XPath steps के बाद वापस JSON में जाने के लिए XML to JSON Converter इस्तेमाल करें।
XPath कुछ क्यों नहीं लौटाता
- ऐसा namespace जो Namespace Mapping में घोषित नहीं है, या path में उसका prefix नहीं है।
- गलत case: XPath में element और attribute के नाम case-sensitive होते हैं।
- Path उस payload के लिए लिखा गया जो किसी mapping या converter के बदलने से पहले था।
- JSON path जिसमें
/rootstep नहीं है, या root का नाम बदलने के बाद भी default नाम है। - Content Modifier row में गलत data type:
java.lang.Stringtext लौटाता है,org.w3c.dom.NodeListnodes लौटाता है।
बाद में इन values से body बनानी है? Simple expressions वाला लेख बताता है कि अभी पढ़ी गई properties कैसे इस्तेमाल करें, और Postman और OpenAPI वाला लेख बताता है कि REST API को JSON body कैसे भेजें।
Kitegra कैसे मदद करता है
Kitegra browser एक्सटेंशन आपके sample से paths लिखता है। इसे XML या JSON में sample payload दें, और यह Content Modifier की XPath rows में, और Router, Filter, Splitter, Gather, Aggregator और Content Enricher में XPath expressions सुझाता है। JSON sample के लिए सुझाए गए paths converter के root, /root, से शुरू होते हैं।
Sample payloads आपके browser में ही रहते हैं: Kitegra उन्हें कभी नहीं सहेजता। एक्सटेंशन किसी iFlow का content कभी सहेजता, deploy या edit नहीं करता, और आपका tenant सिर्फ़ तब बदलता है जब आप चार नामित actions में से किसी एक पर क्लिक करते हैं, जिन्हें बंद भी किया जा सकता है।
कोई XPath step असल में कौन-सी body पाता है, यह देखने के लिए message को step by step trace करें।
Kitegra खाते के बिना यह हर मॉड्यूल में 5 iFlows पर काम करता है। Free प्लान में 50, Starter में 100 और Pro में 300 iFlows शामिल हैं; Business में कोई सीमा नहीं। प्लान की तुलना करें।
अपने अगले iFlow में आज़माएँ
पढ़ें कि Kitegra, SAP Integration Suite के डिज़ाइनर में क्या करता है, या इसे Kitegra के बाकी Chrome एक्सटेंशन के साथ देखें।
अक्सर पूछे जाने वाले प्रश्न
SAP CPI में XML से कोई value property में कैसे पढ़ूँ?
Content Modifier में एक exchange property row जोड़ें, जिसका source type XPath हो, source value में path हो, जैसे /Orders/Order/Id, और data type java.lang.String हो।
मेरा XPath कुछ क्यों नहीं लौटाता?
सबसे आम कारण हैं Namespace Mapping में घोषित न किया गया namespace, element के नाम में गलत case, या ऐसा path जो mapping के payload बदलने से पहले के लिए लिखा गया था।
क्या JSON payload पर XPath इस्तेमाल कर सकते हैं?
सीधे नहीं। पहले JSON to XML Converter से JSON को बदलें, फिर बदले हुए XML पर XPath लिखें।
JSON के XPaths /root से क्यों शुरू होते हैं?
JSON to XML Converter default रूप से root नाम का root element जोड़ता है, क्योंकि कई members वाले JSON object का कोई एक root नहीं होता। अगर आप उसका नाम बदलते हैं, तो paths भी बदलें।
JSON to XML Converter के बाद JSON arrays कैसे दिखते हैं?
Array का हर item array के नाम वाला एक दोहराया गया element बन जाता है, इसलिए दो entries वाला items दो items elements बन जाता है, जिन्हें /root/items से पढ़ा जाता है।
XPath से message को हर order के लिए कैसे split करूँ?
दोहराए जाने वाले node के XPath के साथ Splitter इस्तेमाल करें, जैसे /Orders/Order। हर order अपना अलग message बन जाता है।