Могут ли атрибуты быть скрыты в простом объекте? - PullRequest
1 голос
/ 20 декабря 2010

У меня есть этот объект simplexml, и он выглядит хорошо, но когда я преобразую его часть ... например: $ xmlMeshHeading = $ MeshHeading-> asXML ();

Я неожиданно получаю атрибуты, которые могунайти в простом объекте XML ...?Вот некоторые части этих двух файлов:

SimpleXMLObject:

[MeshHeadingList] => SimpleXMLElement Object [DescriptorName] => Acoustic Stimulation 
                                (
                                    [MeshHeading] => Array
                                        (
                                            [0] => SimpleXMLElement Object
                                                (

                                                    [QualifierName] => methods
                                                )

                                            [1] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Adolescent
                                                )

                                            [2] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Age Factors
                                                )

                                            [3] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Child
                                                )

                                            [4] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Electromyography
                                                    [QualifierName] => methods
                                                )

                                            [5] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Female
                                                )

                                            [6] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Galvanic Skin Response
                                                    [QualifierName] => physiology
                                                )

                                            [7] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Humans
                                                )

                                            [8] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Male
                                                )

                                            [9] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Muscle, Skeletal
                                                    [QualifierName] => physiology
                                                )

                                            [10] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Probability
                                                )

                                            [11] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Reaction Time
                                                    [QualifierName] => physiology
                                                )

                                            [12] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Sex Factors
                                                )

                                            [13] => SimpleXMLElement Object
                                                (
                                                    [DescriptorName] => Startle Reaction
                                                    [QualifierName] => physiology
                                                )

А вот файл asXML из того же источника ...:

 <MeshHeadingList>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Acoustic Stimulation</DescriptorName>
                <QualifierName MajorTopicYN="N">methods</QualifierName>
            </MeshHeading>

            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Adolescent</DescriptorName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Age Factors</DescriptorName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Child</DescriptorName>

            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Electromyography</DescriptorName>
                <QualifierName MajorTopicYN="Y">methods</QualifierName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Female</DescriptorName>

            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Galvanic Skin Response</DescriptorName>
                <QualifierName MajorTopicYN="N">physiology</QualifierName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Humans</DescriptorName>

            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Male</DescriptorName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Muscle, Skeletal</DescriptorName>
                <QualifierName MajorTopicYN="Y">physiology</QualifierName>

            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Probability</DescriptorName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Reaction Time</DescriptorName>
                <QualifierName MajorTopicYN="N">physiology</QualifierName>

            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Sex Factors</DescriptorName>
            </MeshHeading>
            <MeshHeading>
                <DescriptorName MajorTopicYN="N">Startle Reaction</DescriptorName>
                <QualifierName MajorTopicYN="Y">physiology</QualifierName>

            </MeshHeading>
        </MeshHeadingList>

Мой вопрос ... 1.есть функция, чтобы "показать" атрибуты в SimpleXML?ИЛИ 2. Как я могу получить вещи из файла XML, такие как атрибуты и значения ...?

Best, Thijs

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

Да.Атрибуты возвращаются только при доступе к конкретному узлу.Например:

$xml = new SimpleXMLElement('<xml><foo bar="baz">hello world</foo></xml>');
print_r($xml);

Выходы:

SimpleXMLElement Object
(
    [foo] => hello world
)

При этом:

$xml = new SimpleXMLElement('<xml><foo bar="baz">hello world</foo></xml>');
print_r($xml->foo);

Выходы:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [bar] => baz
        )

    [0] => hello world
)

Это, вероятно, из-завнутренняя структура SimpleXMLElement.Как и многие встроенные объекты в PHP (DOMDocument и т. Д.), Большинство свойств не распечатываются при использовании на них print_r.Для атрибутов SimpleXML print_r не будет отображать их, пока вы не получите доступ к узлу, поскольку он будет перегружен до __get (вид).

1 голос
/ 20 декабря 2010

print_r() просто не тот инструмент для проверки SimpleXMLElement объектов.

Если вы хотите узнать, что внутри него, просто используйте ->asXML() и прочитайте его в XML. 100% его узлов и атрибутов всегда доступны, несмотря на то, что они не отображаются print_r() или var_dump().

...