本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
結果
這項政策會將訊息從可延伸標記語言 (XML) 格式轉換為 JavaScript 物件標記法 (JSON),並提供多種選項,讓您控制訊息的轉換方式。
假設意圖是將 XML 格式回應轉換為 JSON 格式回應,則政策會附加至回應流程 (例如 Response / ProxyEndpoint/PostFlow)。
這項政策是標準政策,可部署至任何環境類型。如要瞭解政策類型和各環境類型的可用性,請參閱「政策類型」。
關於
在一般中介服務情境中,針對傳入要求流程的 JSON 至 XML 政策,通常會搭配傳出回應流程的 XML 至 JSON 政策。透過這種方式結合政策,即可為僅原生支援 XML 的後端服務公開 JSON API。
如果 API 是由各種用戶端應用程式使用,且可能需要 JSON 或 XML,則可透過設定 JSON 至 XML 和 XML 至 JSON 政策,以條件方式執行,動態設定回應格式。如要瞭解如何實作此情境,請參閱「流程變數和條件」。
範例
如要進一步瞭解 JSON 與 XML 之間的轉換作業,請參閱這篇文章。
轉換回覆
<XMLToJSON name="ConvertToJSON"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
這個設定是將 XML 轉換為 JSON 所需的最低設定,會採用 XML 格式的回應訊息做為來源,然後建立 JSON 格式的訊息,並填入 response
OutputVariable。Apigee 會自動使用這個變數的內容,做為下一個處理步驟的訊息。
元素參照
以下是您可以在這項政策中設定的元素和屬性。
<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1"> <DisplayName>XML to JSON 1</DisplayName> <Source>response</Source> <OutputVariable>response</OutputVariable> <Options> <RecognizeNumber>true</RecognizeNumber> <RecognizeBoolean>true</RecognizeBoolean> <RecognizeNull>true</RecognizeNull> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName> <AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix> <OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix> <StripLevels>2</StripLevels> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options> <!-- Use Options or Format, not both --> <Format>yahoo</Format> </XMLToJSON>
<XMLtoJSON> 屬性
<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
下表說明所有政策父項元素的共同屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
name |
政策的內部名稱。 您可以選擇使用 |
不適用 | 必填 |
continueOnError |
將其設為 將其設為 |
false | 選用 |
enabled |
設為 設為 |
是 | 選用 |
async |
此屬性已淘汰。 |
false | 已淘汰 |
<DisplayName> 元素
除了 name
屬性之外,您也可以在管理 UI 代理程式編輯器中使用不同的自然語言名稱標示政策。
<DisplayName>Policy Display Name</DisplayName>
預設 |
不適用 如果省略這個元素,系統會使用政策的 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
<Source> 元素
指定要轉換為 JSON 的 XML 訊息。
來源訊息的 HTTP Content-type 標頭必須設為 application/xml
,否則系統不會強制執行這項政策。
如果未定義 <Source>
,系統會將其視為 message
,當政策附加至要求流程時,會解析為 request
,當政策附加至回應流程時,則會解析為 response
。
如果無法解析來源變數,或解析為非訊息類型,政策會擲回錯誤。
<Source>response</Source>
預設 | Source 元素的值 |
---|---|
存在必要性 | 選用 |
類型 | 訊息 |
<OutputVariable> 元素
指定 XML 到 JSON 格式轉換作業的輸出內容儲存位置。一般來說,這項元素不會包含在政策設定中。
Apigee 會剖析 Source
中指定的 XML 訊息酬載,將其轉換為 JSON,將結果儲存至 OutputVariable
的酬載,並將 OutputVariable
訊息的 HTTP 內容類型標頭設為 application/json
。
如果未指定 OutputVariable
,系統會預設使用 Source
的值。舉例來說,如果 source
是 response
,則 OutputVariable
預設為 response
。
<OutputVariable>response</OutputVariable>
預設 | Source 中指定的訊息 |
---|---|
存在必要性 | 選用 |
類型 | 訊息 |
<選項>
您可以透過選項控制 XML 到 JSON 的轉換作業。您可以使用 <Options>
群組新增特定轉換設定,也可以使用 <Format>
元素參照預先定義選項的範本。您無法同時使用 <Options>
和 <Format>
。
如果未使用 <Format>
,就必須提供 <Options>
。
<RecognizeNumber> 元素
如果為 true,XML 酬載中的數字欄位會保留原始格式。
<RecognizeNumber>true</RecognizeNumber>
請參考以下 XML 範例:
<a> <b>100</b> <c>value</c> </a>
如果 RecognizeNumber
是 true
,政策會將其轉換為:
{ "a": { "b": 100, "c": "value" } }
如果 RecognizeNumber
是 false
,政策會將其轉換為:
{ "a": { "b": "100", "c": "value" } }
預設 | false |
---|---|
存在必要性 | 選用 |
類型 | 布林值 |
<RecognizeBoolean> 元素
讓轉換保留布林值的 true/false 值,而非將值轉換為字串。
<RecognizeBoolean>true</RecognizeBoolean>
以下是 XML 範例:
<a> <b>true</b> <c>value</c> </a>
如果 RecognizeBoolean
是 true
,政策會將其轉換為:
{ "a": { "b": true, "c": "value" } }
如果 RecognizeBoolean
是 false
,政策會將其轉換為:
{ "a": { "b": "true", "c": "value" } }
預設 | false |
---|---|
存在必要性 | 選用 |
類型 | 布林值 |
<RecognizeNull> 元素
可將空白值轉換為空值。
<RecognizeNull>true</RecognizeNull>
針對下列 XML:
<a> <b></b> <c>value</c> </a>
如果 RecognizeNull
是 true
,且沒有 NullValue
選項,這個 XML 會轉換為:
{ "a": { "b": null, "c": "value" } }
如果 RecognizeNull
是 false
,這個 XML 會轉換為:
{ "a": { "b": {}, "c": "value" } }
預設 | false |
---|---|
存在必要性 | 選用 |
類型 | 布林值 |
<NullValue> 元素
指示來源訊息中已辨識的空值應轉換為哪個值。預設值為 null
。只有在 RecognizeNull
為 true 時,這個選項才會生效。
<NullValue>not-present</NullValue>
針對下列 XML:
<a> <b></b> <c>value</c> </a>
如果 RecognizeNull
是 true
,且未指定 NullValue
,則此 XML 會轉換為:
{ "a": { "b": null, "c": "value" } }
如果 RecognizeNull
是 true
,而 NullValue
是 not-present
,則此 XML 會轉換為:
{ "a": { "b": "not-present", "c": "value" } }
預設 | null |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
命名空間選項
根據預設,這項政策會在產生的 JSON 中省略 XML 命名空間。如要指定 XML 文件中的命名空間應轉譯為產生的 JSON,請一併使用這些元素。
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator>
請參考以下 XML 範例:
<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com"> <ns1:b>value</ns1:b> </a>
如果未指定 NamespaceSeparator
,系統會產生下列 JSON 結構:
{ "a": { "b": "value" } }
如果元素 NamespaceBlockName
、DefaultNamespaceNodeName
和 NamespaceSeparator
分別指定為 #namespaces
、&
和 ***
,系統就會產生下列 JSON 結構:
{ "a": { "#namespaces": { "&": "http://ns.com", "ns1": "http://ns1.com" }, "ns1***b": "value" } }
預設 | 無,如果未指定 <NamespaceBlockName> ,政策會產生不參照任何 XML 命名空間的輸出 JSON,無論來源訊息是否參照命名空間。 |
---|---|
存在必要性 | 選用 不過,如果您指定 <NamespaceBlockName> ,則必須一併指定其他兩個元素。 |
類型 | 字串 |
文字選項
搭配使用這些元素。
<TextAlwaysAsProperty>true|false</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName>
當政策遇到只包含單一文字節點做為子項的 XML 元素時,政策會將該 XML 元素的文字內容轉譯為 JSON 雜湊中的屬性。
當政策遇到包含多個混合內容子項的 XML 元素時,您可以使用這些選項控制任何子文字節點的輸出 JSON。
舉例來說,請考慮下列政策設定:
<XMLToJSON name='XMLToJSON-1'> <Options> <TextAlwaysAsProperty>???</TextAlwaysAsProperty> <TextNodeName>#text</TextNodeName> </Options> </XMLToJSON>
針對指定的 XML 輸入內容,政策會根據 TextAlwaysAsProperty
是 true
或 false
產生以下輸出內容:
XML 輸入 | JSON 輸出內容 | |
---|---|---|
TextAlwaysAsProperty 為 false 時 |
TextAlwaysAsProperty 為 true 時 |
|
<a>value1</a> |
{ "a": "value1" } |
{ "a": { "#text": "value1" } } |
<a>value1 <b>value2</b> </a> |
{ "a": { "#text": "value1\n", "b": "value2" } } |
{ "a": { "#text": "value1\n", "b": { "#text": "value2" } } } |
預設 | <TextAlwaysAsProperty> : false<TextNodeName> : (空字串) |
---|---|
存在必要性 | 選用 |
類型 | <TextAlwaysAsProperty> :布林值<TextNodeName> :字串 |
屬性選項
這些元素可讓您將屬性值分組成 JSON 區塊,並在屬性名稱中加上前置字串。
<AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix>
請參考以下 XML 範例:
<a attrib1="value1" attrib2="value2"/>
如果兩個屬性 (AttributeBlockName
和 AttributePrefix
) 都按照 XML 到 JSON 範例中的定義指定,系統會產生下列 JSON 結構:
{ "a": { "FOO_BLOCK": { "BAR_attrib1": "value1", "BAR_attrib2": "value2" } } }
如果只指定 AttributeBlockName
,系統會產生下列 JSON 結構:
{ "a": { "FOO_BLOCK": { "attrib1": "value1", "attrib2": "value2" } } }
如果只指定 AttributePrefix
,系統會產生下列 JSON 結構:
{ "a": { "BAR_attrib1": "value1", "BAR_attrib2": "value2" } }
如果未指定上述兩者,系統會產生下列 JSON 結構:
{ "a": { "attrib1": "value1", "attrib2": "value2" } }
預設 | 無。 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
<OutputPrefix> 和 <OutputSuffix> 元素
將這些元素搭配使用,即可為產生的 JSON 套用前置字元和/或後置字元。
<OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix>
請參考以下 XML 範例:
<a>value</a>
假設政策設定如下:
<XMLToJSON name='XMLToJSON-4'> <Options> <OutputPrefix>{ "result": </OutputPrefix> <OutputSuffix>}</OutputSuffix> </Options> </XMLToJSON>
系統會產生下列 JSON 結構:
{ "result": { "a": "value" } }
您可以省略 OutputPrefix
和 OutputSuffix
中的任一或兩者。
使用這些元素可能會產生無效的 JSON。例如使用以下政策設定:
<XMLToJSON name='XMLToJSON-4'> <Options> <OutputPrefix>PREFIX_</OutputPrefix> </Options> </XMLToJSON>
政策會產生以下內容,但這不是有效的 JSON:
PREFIX_{ "a" : "value" }
如果設定未指定 OutputPrefix
或 OutputSuffix
,政策會產生下列 JSON 結構:
{ "a": "value" }
預設 | 請參閱上述範例。 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
<StripLevels> 元素
<Options> <StripLevels>4</StripLevels> </Options>
有時 XML 酬載 (例如 SOAP) 會包含許多您不想納入轉換後 JSON 的父層。以下是包含多個層級的 SOAP 回應範例:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/"> <GetCityWeatherByZIPResult> <State>CO</State> <City>Denver</City> <Description>Sunny</Description> <Temperature>62</Temperature> </GetCityWeatherByZIPResult> </GetCityWeatherByZIPResponse> </soap:Body> </soap:Envelope>
您必須先通過 4 個層級,才能進入「州」、「城市」、「說明」和「溫度」層級。如果不使用 <StripLevels>
,轉換後的 JSON 回應會如下所示:
{ "Envelope" : { "Body" : { "GetCityWeatherByZIPResponse" : { "GetCityWeatherByZIPResult" : { "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" } } } } }
如果您想在 JSON 回應中移除前 4 個層級,請設定 <StripLevels>4</StripLevels>
,這樣您就會收到以下 JSON:
{ "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" }
您可以刪除多個層級,直到找到包含多個子項的第一個元素為止。代表什麼意思?以下是較複雜的 JSON 範例:
{ "Envelope" : { "Body" : { "GetCityForecastByZIPResponse" : { "GetCityForecastByZIPResult" : { "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
本例中的第 3 層是 GetCityForecastByZIPResponse
,只有一個子項。因此,如果您要使用 <StripLevels>3</StripLevels>
(移除前三個層級),JSON 會如下所示:
{ "GetCityForecastByZIPResult" : { "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
請注意,GetCityForecastByZIPResult
有多個子項。由於這是包含多個子項的第一個元素,您可以使用 <StripLevels>4</StripLevels>
移除這個最後一層,這樣就會產生下列 JSON:
{ "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
由於第 4 層是第一個包含多個子項的層級,因此您無法移除低於此層級的任何層級。如果您將條紋層級設為 5、6、7 等,將會繼續收到上述回應。
預設 | 0 (不去除層級) |
---|---|
存在必要性 | 選用 |
類型 | 整數 |
<TreatAsArray>/<Path> 元素
<Options> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
這個元素組合可確保 XML 文件中的值一律會轉譯為 JSON 陣列。當不同酬載的子元素數量不同時,這項功能就很實用。Apigee 的預設行為是將同名子元素轉換為 JSON 陣列,並將單一子元素轉換為 JSON 基本元素。TreatAsArray
選項可確保子元素一律會轉譯為 JSON 陣列。
使用 TreatAsArray
可改善後續處理輸出的程式碼結構,因為陣列的資料每次都會以相同方式傳回。舉例來說,無論原始 XML 是否包含一個或多個 name
元素,評估 $.teachers.teacher.studentnames.name[0]
的 JSONPath 都會一律傳回名字值。
讓我們先回顧 XML 到 JSON 的預設行為,然後瞭解如何使用 <TreatAsArray>/<Path>
控制輸出內容。
如果 XML 文件包含多次出現的元素 (當 XML 結構定義為元素的 maxOccurs='unbounded'
時,就可能發生這種情況),XML 轉 JSON 政策會自動將這些值放入陣列。例如,以下 XML 區塊
<teacher> <name>teacherA</name> <studentnames> <name>student1</name> <name>student2</name> </studentnames> </teacher>
...會自動轉換為下列 JSON,且沒有任何特殊政策設定:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : [ "student1", "student2" ] } } } }
請注意,兩個學生名稱都包含在陣列中。
不過,如果 XML 文件中只顯示一個學生,XML 到 JSON 政策會自動將該值視為單一字串,而非字串陣列,如以下範例所示:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : "student1" } } } }
在前述範例中,系統會以不同的方式轉換類似的資料,一次轉換為陣列,另一次轉換為單一字串。<TreatAsArray>/<Path>
元素可讓您控制輸出內容,確保學生名稱一律會轉換為陣列,即使只有一個值也不例外。如要設定這項功能,請找出要將值轉換為陣列的元素路徑,例如:
<Options> <TreatAsArray> <Path>teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
上述設定會產生類似以下的 JSON:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : ["student1"] } } } }
請注意,student1 現已位於陣列中。無論學生人數為單一或多個,您現在都可以使用下列 JSONPath,從程式碼中的 JSON 陣列中擷取學生資料:$.teachers.teacher.studentnames.name[0]
<Path>
元素也包含 unwrap
屬性,詳情請見下一節。
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
屬性
<Options> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
屬性 | 說明 | 存在必要性 | 類型 |
---|---|---|---|
unwrap |
預設值:false 從 JSON 輸出內容中移除元素。您可以使用這項功能簡化或扁平化 (「展開」) JSON,藉此縮短擷取值所需的 JSONPath。舉例來說,您可以將 JSON 展開,並使用 以下是 JSON 範例: { "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : [ "student1", "student2" ]}... 在這個範例中,您可以說 <TreatAsArray> <Path unwrap="true">teachers/teacher</Path> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray>
{ "teachers" : [{ "name" : "teacherA", "studentnames" : ["student1","student2"] }]... 請注意,由於 |
選用 | 布林值 |
如需更多範例和功能操作說明,請參閱 這篇 Google Cloud 社群文章。
<Format>
格式可讓您控制 XML 到 JSON 的轉換作業。輸入預先定義範本的名稱,該範本包含本主題所述的選項元素特定組合。預先定義的格式包括:xml.com
、yahoo
、google
、badgerFish
。
使用 <Format>
元素或 <Options>
群組。您無法同時使用 <Format>
和 <Options>
。
以下是每個預先定義範本的格式定義。
xml.com
<RecognizeNull>true</RecognizeNull> <TextNodeName>#text</TextNodeName> <AttributePrefix>@</AttributePrefix>
yahoo
<RecognizeNumber>true</RecognizeNumber> <TextNodeName>content</TextNodeName>
<TextNodeName>$t</TextNodeName> <NamespaceSeparator>$</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
badgerFish
<TextNodeName>$</TextNodeName> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <AttributePrefix>@</AttributePrefix> <NamespaceSeparator>:</NamespaceSeparator> <NamespaceBlockName>@xmlns</NamespaceBlockName> <DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>
元素語法:
<Format>yahoo</Format>
預設 | (無) |
---|---|
有效值 | 下列任一項目:xml.com 、yahoo 、google 、badgerFish |
存在必要性 | 選用,但如果未使用 <Options> ,則為必填。 |
類型 | 字串 |
結構定義
錯誤參考資料
本節說明這項政策觸發錯誤時,Apigee 傳回的錯誤代碼和錯誤訊息,以及 Apigee 設定的錯誤變數。如果您要開發錯誤處理規則,就必須瞭解這項資訊。如需更多資訊,請參閱「關於政策錯誤的相關資訊」和「處理錯誤」。
執行階段錯誤
政策執行時可能會發生這些錯誤。
錯誤代碼 | HTTP 狀態 | 原因 | 修正 |
---|---|---|---|
steps.xmltojson.ExecutionFailed |
ExecutionFailed |
當輸入酬載 (XML) 為空白,或輸入 XML 無效或格式錯誤時,就會發生這項錯誤。 | build |
steps.xmltojson.InCompatibleTypes |
ExecutionFailed |
如果 <Source> 元素和 <OutputVariable> 元素中定義的變數類型不一致,就會發生此錯誤。<Source> 元素和 <OutputVariable> 元素中包含的變數類型必須一致。 |
build |
steps.xmltojson.InvalidSourceType |
ExecutionFailed |
如果用來定義 <Source> 元素的變數類型無效,就會發生這項錯誤。有效的變數類型為訊息和字串。 |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
ExecutionFailed |
如果 XML 到 JSON 政策的 <Source> 元素中指定的變數為字串類型,且未定義 <OutputVariable> 元素,就會發生這個錯誤。如果 <Source> 元素中定義的變數為字串類型,則必須使用 <OutputVariable> 元素。 |
build |
steps.xmltojson.SourceUnavailable |
ExecutionFailed |
如果 XML 到 JSON 政策的 <Source> 元素中指定的 message 變數為下列任一情況,就會發生此錯誤:
|
build |
部署錯誤
部署含有這項政策的 Proxy 時,可能會發生這些錯誤。
錯誤名稱 | 原因 | 修正 |
---|---|---|
EitherOptionOrFormat |
如果 XML 到 JSON 政策中未宣告其中一個 <Options> 或 <Format> 元素,則 API Proxy 的部署作業會失敗。 |
build |
UnknownFormat |
如果 XML 到 JSON 政策中的 <Format> 元素定義了不明格式,API 代理程式就會無法部署。預先定義的格式包括:xml.com 、yahoo 、google 和 badgerFish 。 |
build |
錯誤變數
這些變數會在發生執行階段錯誤時設定。詳情請參閱「關於政策錯誤的相關資訊」。
變數 | 地點 | 範例 |
---|---|---|
fault.name="fault_name" |
fault_name 是錯誤名稱,如上方「執行階段錯誤」表格所列。錯誤名稱是錯誤代碼的最後一個部分。 | fault.name = "SourceUnavailable" |
xmltojson.policy_name.failed |
policy_name 是擲回錯誤的政策的使用者指定名稱。 | xmltojson.XMLtoJSON-1.failed = true |
錯誤回應範例
{ "fault": { "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available", "detail": { "errorcode": "steps.xml2json.SourceUnavailable" } } }
錯誤規則範例
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults"> <Step> <Name>AM-SourceUnavailableMessage</Name> <Condition>(fault.name Matches "SourceUnavailable") </Condition> </Step> <Step> <Name>AM-BadXML</Name> <Condition>(fault.name = "ExecutionFailed")</Condition> </Step> <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition> </FaultRule>
相關主題
JSON 轉換為 XML:JSONtoXML 政策