Php 如何使用simplexml修复数据

Php 如何使用simplexml修复数据,php,xml,simplexml,Php,Xml,Simplexml,我一直在做一个项目,遇到了困难。我在网上做了调查,似乎没有人和我有同样的问题,这让我很难过。我无法从simplexml\u load\u string()获取完整的xml。当我使用simplexml时,它给了我一个问题。:正是大多数人认为的问题所在。如果您查看底部示例中的sales rankings标记,然后查看层次结构,您将看到没有一个名称空间。以下是原始xml: <GetMatchingProductForIdResponse xmlns="http://mws.amazonservi

我一直在做一个项目,遇到了困难。我在网上做了调查,似乎没有人和我有同样的问题,这让我很难过。我无法从
simplexml\u load\u string()
获取完整的xml。当我使用simplexml时,它给了我一个问题。
正是大多数人认为的问题所在。如果您查看底部示例中的sales rankings标记,然后查看层次结构,您将看到没有一个名称空间。以下是原始xml:

<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<GetMatchingProductForIdResult Id="883028968343" IdType="UPC" status="Success">
    <Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
        <Product>
            <Identifiers>
                <MarketplaceASIN>
                    <MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
                    <ASIN>B007C435CW</ASIN></MarketplaceASIN>
            </Identifiers>
            <AttributeSets>
                <ns2:ItemAttributes xml:lang="en-US">
                <ns2:Binding>Apparel</ns2:Binding>
                <ns2:Brand>Secret Wishes</ns2:Brand>
                <ns2:Color>Black</ns2:Color>
                <ns2:Department>womens</ns2:Department>
                <ns2:Feature>Black and gold musketeer or pirate costume</ns2:Feature>
                <ns2:Feature>Features strapless corset with lace up back and matching mini skirt</ns2:Feature>
                <ns2:Feature>Hat and choker included</ns2:Feature>
                <ns2:Feature>Boots and sword available separately</ns2:Feature>
                <ns2:Feature>Sexy wishes for playful adults is a division of rubies costume company</ns2:Feature>
                <ns2:Genre>Historical</ns2:Genre>
                <ns2:IsAdultProduct>false</ns2:IsAdultProduct> 
                <ns2:Label>Secret Wishes</ns2:Label>
                <ns2:Manufacturer>Secret Wishes</ns2:Manufacturer><ns2:Model>889683XS</ns2:Model>
                <ns2:PackageDimensions>
                    <ns2:Height Units="inches">1.10</ns2:Height>
                    <ns2:Length Units="inches">14.50</ns2:Length>
                    <ns2:Width Units="inches">11.40</ns2:Width>
                    <ns2:Weight Units="pounds">0.90</ns2:Weight>
                </ns2:PackageDimensions>
                <ns2:ProductGroup>Apparel</ns2:ProductGroup> 
                <ns2:ProductTypeName>ADULT_COSTUME</ns2:ProductTypeName>       
                <ns2:Publisher>Secret Wishes</ns2:Publisher>
                <ns2:Size>X-Small</ns2:Size>
                <ns2:SmallImage>
                    <ns2:URL>http://ecx.images-amazon.com/images/I/41YPo629q4L._SL75_.jpg</ns2:URL>
                    <ns2:Height Units="pixels">75</ns2:Height>
                    <ns2:Width Units="pixels">37</ns2:Width>
                </ns2:SmallImage>
            </AttributeSets>
            <SalesRankings>
                <SalesRank>
                    <ProductCategoryId>office_product_display_on_website</ProductCategoryId>
                    <Rank>259</Rank>
                </SalesRank>
            </SalesRankings>

             ECT...

我不明白可能的问题是什么。我对这些数据的主要目标是将其推送到JSON。如果有人能帮我,我将不胜感激。谢谢

由于标记名中的“:”符号,simplexml似乎无法正常工作。您可以将所有“:”替换为:

$xml = str_replace ( ':', '_', $xml );

或者寻找其他描述的解决方案。

可能重复的我不想让您告诉我如何处理冒号节点。甚至没有显示销售排名。冒号将名称空间前缀与本地节点名称分开。您的节点具有名称空间。您需要学习如何使用名称空间读取XML。仅仅替换角色在几个方面都有问题。首先,名称空间前缀不是实际的名称空间。它可以更改,并且是可选的。第二,字符可以定期出现在文件的其他部分。我只是希望它是json而不是xml。@Robert幸运的是,对于任何带有名称空间前缀的内容,请参阅。或者,使用您确实理解的XML解析器/API。转换为JSON只会让您出错的地方更多,理解它们的机会更少。为什么我这样做时没有显示销售排名?您是否确保curl_exec完全加载了您的xml文件?如果是,请也查看一下。这里有一段代码,说明如何在解析之前转换xml。它不起作用。我仍然没有得到销售排名的回报。实际上你的答案是正确的。谢谢我很感激!
$xml = str_replace ( ':', '_', $xml );