php - 如何在 PHP 中从 XMLSchema XML 文件读取元素名称数组?

标签 php xml simplexml domdocument

我想从 xml 获取架构元素列表。例如

<xs:schema id="SPPOnlineXML" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="SPPOnlineXML" msdata:IsDataSet="true" msdata:MainDataTable="lev_settings" msdata:UseCurrentLocale="true">
  <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="lev_settings">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="LEVID" type="xs:int" minOccurs="0" />
            <xs:element name="ATTHEADID" type="xs:int" minOccurs="0" />
            <xs:element name="MINDATETYPE" type="xs:unsignedByte" minOccurs="0" />
            <xs:element name="MINMONTH" type="xs:unsignedByte" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema> 

根据上面的模式,我想创建一个元素数组“LEVID”,“ATTHEAD”,“MINDATETYPE”,“MINMONTH”

最佳答案

要以数组形式获取所有xs:元素名称属性值,我建议您选择 SimpleXML 并使用 xpath。一旦您获得了字符串(或文件)中的 XML,如果您知道 xpath 表达式,那么就非常简单了:

# Obtain all element names incl. complexTypes:

//xs:element/@name

# Obtain all element names excl. complexTypes and those
#  which contain anything incl. comments, text etc.:

//xs:element[not(node())]/@name

每个 PHP 代码示例如下:

$xml = simplexml_load_string($string);

echo "Obtain all element names incl. complexTypes:\n";

$elementNames = array_map('strval', $xml->xpath('//xs:element/@name'));
print_r($elementNames);

echo "\nObtain all element names excl. complexTypes and those
  which contain anything incl. comments, text etc.:\n";

$elementNames = array_map('strval', $xml->xpath('//xs:element[not(node())]/@name'));
print_r($elementNames);

See the online Demo.

关于php - 如何在 PHP 中从 XMLSchema XML 文件读取元素名称数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16098414/

相关文章:

php - 如何 ping MySQL 数据库并使用 PDO 重新连接?

python - 在Python ElementTree中,如何获取树中元素的所有祖先的列表?

php - simplexml 并访问 feedburner 的 :

php - 如何限制 SimpleXML 结果的总数?

php - 通过 XPath 提取 HTML 字段

php - 如何从php中的日期中获取数字?

php - Laravel 5 SSL - 使用过时的密码学加密

php - 每个人都使用相同的变量 php?

jquery - 如何打印 json 对象数组

java - 如何让 Axis 1.4 不为同一个 XML namespace 生成多个前缀?