XML定义

XML定义XML eXtensible Markup Language 是一种标记语言 用于描述和传输数据 XML 的设计目标是为了让数据在不同的系统之间进行交换 特别是在互联网上 XML 文档是由标记和数据组成的 标记用来描述数据的含义和结构 数据则是

大家好,欢迎来到IT知识分享网。

XML(eXtensible Markup Language)是一种标记语言,用于描述和传输数据。XML的设计目标是为了让数据在不同的系统之间进行交换,特别是在互联网上。XML文档是由标记和数据组成的,标记用来描述数据的含义和结构,数据则是实际的内容。

XML文档是纯文本,可以在任何系统上读取和解析。XML使用标签来定义元素和属性,这些标签可以自定义,以便适应不同的应用程序和数据格式。XML还提供了一些规范来定义文档的结构、内容和格式,例如DTD(文档类型定义)、XML Schema和命名空间。

总之,XML是一种灵活、可扩展和可定制的标记语言,用于描述和传输数据,并在各种应用程序和系统之间实现数据交换和共享。

XML的语法和结构类似于HTML,但XML的重点不在于呈现和展示数据,而是在于数据的描述和传输。XML文档可以包含任意数量的元素、属性和数据,这些元素和属性可以以任何顺序组合,以便适应不同的应用程序和需求。

以下是一个简单的XML文档的示例:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giacomo Puccini</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore> 

在这个例子中,XML文档描述了一个书店,其中包含两本书,每本书都有一个类别、标题、作者、年份和价格。这些元素和属性可以通过解析XML文档来提取和使用。

XML被广泛用于各种领域,包括Web服务、数据交换、配置文件、日志文件等。许多编程语言和框架都提供了对XML的支持和解析,以便开发人员能够更轻松地使用和处理XML数据。

XML被广泛应用于各个领域,以下是一些常见领域的XML应用举例:

  1. Web服务:XML被广泛用于Web服务中,例如SOAP(简单对象访问协议)和REST(表述性状态传递)服务。这些服务使用XML格式的消息传递数据,以便不同系统之间进行通信和数据交换。
  2. 数据交换:XML也被广泛用于数据交换和共享中,例如XML数据存储、XML数据转换和XML数据集成。XML可以帮助组织和描述数据,以便不同应用程序和系统之间进行数据交换和共享。
  3. 配置文件:许多应用程序和系统使用XML格式的配置文件来配置和管理应用程序的设置和行为。XML配置文件可以帮助开发人员更轻松地管理和维护应用程序的配置和设置。
  4. 日志文件:许多系统和应用程序使用XML格式的日志文件来记录和分析系统的行为和性能。XML日志文件可以帮助系统管理员更轻松地分析和监视系统的状态和行为。
  5. 电子出版物:XML也被广泛用于电子出版物中,例如电子书、期刊和报纸。XML可以帮助组织和描述文本、图片和其他媒体内容,以便电子出版物可以在不同设备和平台上进行展示和交付。

总之,XML在各个领域都有广泛的应用,可以帮助组织和描述数据、配置、日志、出版物等内容,并支持不同系统之间的数据交换和共享。

分别示例

  1. Web服务

以下是一个使用SOAP协议的简单XML示例:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="<http://www.w3.org/2003/05/soap-envelope/>" xmlns:m="<http://www.example.org/stock>"> <soap:Header/> <soap:Body> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope> 

在这个例子中,XML文档描述了一个使用SOAP协议的Web服务请求,该请求查询股票价格。SOAP协议使用XML格式的消息来传输数据,并使用命名空间来区分不同的元素和属性。

  1. 数据交换

以下是一个使用XML格式的数据交换示例:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <employees> <employee> <name>John Smith</name> <title>Software Engineer</title> <department>Engineering</department> <salary></salary> </employee> <employee> <name>Jane Doe</name> <title>Project Manager</title> <department>Management</department> <salary></salary> </employee> </employees> 

在这个例子中,XML文档描述了一个包含员工信息的数据集合,其中包含每个员工的姓名、职称、部门和薪水。这个XML文档可以被用于不同系统之间的数据交换和共享。

  1. 配置文件

以下是一个使用XML格式的配置文件示例:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <configuration> <database> <host>localhost</host> <port>3306</port> <username>root</username> <password>password</password> <database>mydb</database> </database> <logging> <level>DEBUG</level> <file>/var/log/myapp.log</file> </logging> </configuration> 

在这个例子中,XML文档描述了一个应用程序的配置文件,其中包含数据库连接和日志设置。这个XML文档可以帮助开发人员更轻松地管理和维护应用程序的设置和行为。

  1. 日志文件

以下是一个使用XML格式的日志文件示例:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <log> <entry timestamp="2023-03-16T10:00:00"> <level>INFO</level> <message>User login successful</message> </entry> <entry timestamp="2023-03-16T10:01:00"> <level>WARNING</level> <message>Invalid password for user 'john'</message> </entry> <entry timestamp="2023-03-16T10:02:00"> <level>ERROR</level> <message>Database connection failed</message> </entry> </log> 

在这个例子中,XML文档描述了一个应用程序的日志文件,其中包含每个日志条

以下是XML语法的50个常用元素和属性:

元素:

  1. <xml>:XML文档的根元素,必须是第一个元素。
  2. <element>:XML文档中的基本元素,可以包含其他元素或文本。
  3. <attribute>:XML元素的属性。
  4. <comment>:XML注释,不会被解析器读取。
  5. <CDATA>:用于在XML文档中插入大量的文本或代码。
  6. <processing-instruction>:指示解析器对XML文档执行特定操作的指令。
  7. <namespace>:用于在XML文档中定义命名空间。
  8. <doctype>:用于指定XML文档的文档类型。
  9. <entity>:用于在XML文档中定义实体。
  10. <document-fragment>:用于创建独立于XML文档的文档片段。

属性:

  1. name:元素或属性的名称。
  2. value:元素或属性的值。
  3. id:元素的唯一标识符。
  4. type:属性的数据类型。
  5. lang:元素或属性的语言。
  6. xmlns:定义元素的命名空间。
  7. encoding:指定XML文档的编码方式。
  8. standalone:指定XML文档是否独立。
  9. version:指定XML文档的版本。
  10. default:定义XML文档中的默认元素。

其他元素和属性:

  1. parent:指定元素的父元素。
  2. child:指定元素的子元素。
  3. root:指定XML文档的根元素。
  4. text:包含元素的文本内容。
  5. xpath:用于在XML文档中定位元素。
  6. schema:用于定义XML文档的结构和约束。
  7. dtd:定义XML文档的约束。
  8. xslt:用于将XML文档转换为其他格式。
  9. namespace prefix:用于定义命名空间前缀。
  10. namespace URI:用于定义命名空间的统一资源标识符。
  1. target:指定处理指令的目标应用程序。
  2. select:在XSLT转换中,用于选择要操作的节点。
  3. output:用于指定XSLT转换输出的类型和格式。
  4. xsl:template:在XSLT转换中,用于定义模板以匹配特定节点。
  5. xsl:if:在XSLT转换中,用于指定条件以在模板中包含或排除节点。
  6. xsl:for-each:在XSLT转换中,用于迭代处理一组节点。
  7. xsl:value-of:在XSLT转换中,用于提取节点的值并将其插入输出中。
  8. xsl:attribute:在XSLT转换中,用于为元素添加属性。
  9. xsl:apply-templates:在XSLT转换中,用于将节点发送到适当的模板进行处理。
  10. xsl:copy-of:在XSLT转换中,用于将节点及其子节点复制到输出中。
  11. xmlns:xsl:用于定义XSLT命名空间。
  12. xmlns:xml:用于定义XML命名空间。
  13. xmlns:xhtml:用于定义XHTML命名空间。
  14. xmlns:svg:用于定义SVG命名空间。
  15. xmlns:mathml:用于定义MathML命名空间。
  16. xmlns:xlink:用于定义XLink命名空间。
  17. xmlns:soap:用于定义SOAP命名空间。
  18. xmlns:wsdl:用于定义WSDL命名空间。
  19. xmlns:atom:用于定义Atom命名空间。
  20. xmlns:rdf:用于定义RDF命名空间。
  21. <!DOCTYPE>:用于指定XML文档的文档类型定义。
  22. <!ELEMENT>:用于定义元素的类型和结构。
  23. <!ATTLIST>:用于定义元素的属性列表。
  24. <!ENTITY>:用于定义实体和实体引用。
  25. <!NOTATION>:用于定义标记声明。
  26. <!– –>:用于注释XML文档。
  27. <?xml version=”1.0″ encoding=”UTF-8″?>:XML文档的头部声明。
  28. <?xml-stylesheet?>:用于指定将XML文档转换为其他格式的样式表。
  29. <?xml-multiple?>:用于指定XML文档中的多个根元素。
  30. <!CDATA[]>:用于在XML文档中插入大量的文本或代码。
  31. <:小于符号(<)的实体引用。
  32. >:大于符号(>)的实体引用。
  33. &:和符号(&)的实体引用。
  34. :单引号(‘)的实体引用。
  35. :双引号
  1. &#xx;:用于表示ASCII或Unicode字符的十进制或十六进制实体引用。
  2. :用于表示单引号的实体引用。
  3. :用于表示省略号的实体引用。
  4. :用于表示短破折号的实体引用。
  5. :用于表示长破折号的实体引用。

需要注意的是,XML语法中的大小写敏感,标签和属性名必须使用相同的大小写方式。另外,XML文档必须具有一个根元素,并且每个元素必须正确嵌套和闭合。否则,XML解析器将无法解析文档并生成错误。

)

dtd 配置

DTD(Document Type Definition)是一种定义XML文档结构的语法规则,它可以指定XML文档中可以包含哪些元素、元素之间的关系、元素的属性以及属性值等信息。下面是一个简单的DTD配置示例:

phpCopy code <!DOCTYPE catalog SYSTEM "catalog.dtd"> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> </catalog> 

上面的示例中,DOCTYPE指令指定了XML文档使用的DTD文件的位置和名称。DTD文件通常是一个独立的文件,其中包含了XML文档中使用的所有元素和属性的定义。

下面是一个简单的catalog.dtd文件的示例:

phpCopy code <!ELEMENT catalog (book+)> <!ELEMENT book (author, title, genre, price, publish_date, description)> <!ATTLIST book id CDATA #REQUIRED> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT genre (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT publish_date (#PCDATA)> <!ELEMENT description (#PCDATA)> 

上面的示例中,第一行定义了catalog元素必须包含一个或多个book元素。接下来的几行定义了book元素必须包含author、title、genre、price、publish_date和description元素,并且必须包含一个id属性。最后,每个元素的类型均被定义为“(#PCDATA)”,这意味着它们可以包含任何文本或数据。

DTD配置的目的是为了定义XML文档的结构和规则,使XML解析器能够根据这些规则检查XML文档的有效性,并且根据规则生成相应的解析树。通过DTD,可以确保XML文档的结构和数据是有效的,并且可以在不同的应用程序之间共享和交换。

在实际应用中,DTD可以在XML文档中内联或引用外部DTD文件。如果DTD被内联到XML文档中,可以使用DOCTYPE指令来指定DTD的定义。例如:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog [ <!ELEMENT catalog (book+)> <!ELEMENT book (author, title, genre, price, publish_date, description)> <!ATTLIST book id CDATA #REQUIRED> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT genre (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT publish_date (#PCDATA)> <!ELEMENT description (#PCDATA)> ]> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> </catalog> 

上面的示例中,DTD被内联到XML文档中,并在DOCTYPE指令中定义。这种方式适用于DTD比较小的情况。如果DTD比较大或者需要被多个XML文档共享,则可以将DTD定义放到单独的文件中,然后在XML文档中通过DOCTYPE指令来引用外部DTD文件。例如:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog SYSTEM "catalog.dtd"> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> </catalog> 

在这个例子中,DOCTYPE指令指定了使用外部DTD文件“catalog.dtd”。这种方式适用于需要共享DTD定义或者DTD比较大的情况。

外部DTD文件通常包含在一个独立的文件中,其扩展名为.dtd。在DTD文件中,可以定义元素、属性、实体、注释等。下面是一个简单的DTD文件示例:

phpCopy code <!ELEMENT catalog (book+)> <!ELEMENT book (author, title, genre, price, publish_date, description)> <!ATTLIST book id CDATA #REQUIRED> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT genre (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT publish_date (#PCDATA)> <!ELEMENT description (#PCDATA)> 

这个DTD文件定义了一个“catalog”元素和一个“book”元素,其中“book”元素有一个“id”属性。这个DTD文件可以被多个XML文档共享,从而确保这些XML文档的结构和语法一致性。

在XML文档中使用DTD的主要目的是为了定义XML文档的结构和约束规则,从而确保XML文档的有效性。当XML文档与其DTD定义不一致时,就称为非法XML文档。DTD可以用来检查XML文档的合法性,从而避免在解析和处理XML文档时出现错误。

DTD还可以用来指定实体,实体可以用来代替XML文档中的字符和字符串。例如,可以使用实体来代替常用的特殊字符,如“<”代替“<”、“>”代替“>”、“&”代替“&”等。这样可以使XML文档更加可读和易于维护。

总之,DTD是一种定义XML文档结构和规则的语言,可以用来约束XML文档的语法和结构,并确保XML文档的有效性。通过在XML文档中内联或引用外部DTD文件,可以方便地使用DTD来定义和验证XML文档的结构和语法。

除了DTD,XML还有其他用于定义XML文档结构和语法的技术和规范。以下是一些常见的技术和规范:

  1. XML Schema:XML Schema是一种XML文档结构定义语言,也称为XML Schema Definition (XSD)。与DTD不同,XML Schema使用XML格式来定义XML文档的结构和约束规则。XML Schema具有比DTD更强的类型系统和更丰富的功能,如命名空间、复杂类型、继承和重用等。
  2. RELAX NG:RELAX NG是一种基于XML语法的轻量级XML文档结构定义语言。它与DTD和XML Schema相比,具有更简单的语法和更少的限制。RELAX NG支持元素和属性的约束、数据类型、模式匹配和模块化定义等。
  3. Schematron:Schematron是一种基于模式的验证语言,可以用来检查XML文档中的业务逻辑和语义。它允许开发人员定义自己的验证规则,以确保XML文档符合特定的业务需求和标准。
  4. XPath:XPath是一种用于在XML文档中定位和选择节点的语言。它可以在XML文档中使用路径表达式来定位节点,从而使XML文档处理更加灵活和高效。XPath可以与XSLT和XML Schema等技术结合使用,从而实现对XML文档的转换、验证和处理。

总之,除了DTD之外,还有XML Schema、RELAX NG、Schematron和XPath等技术和规范可用于定义和约束XML文档的结构和语法。开发人员可以根据自己的需求和要求选择适合自己的技术和规范。

XPath是一种XML文档中定位和选择节点的语言,它提供了一种基于路径表达式的方式来定位XML文档中的节点。XPath可以在XML文档中沿着元素、属性、命名空间等路径定位节点,从而使XML文档处理更加灵活和高效。

XPath表达式由一系列路径和过滤条件组成,可以用来选择符合特定要求的XML节点。以下是XPath中常用的一些路径表达式:

  1. /:表示根节点。
  2. //:表示在整个XML文档中查找匹配的节点。
  3. .:表示当前节点。
  4. ..:表示当前节点的父节点。
  5. @:表示属性节点。
  6. :表示任意名称的元素节点。
  7. @*:表示任意名称的属性节点。

除了路径表达式外,XPath还支持一些操作符和函数,可以用来对XML文档进行更精细的定位和处理。以下是一些常用的XPath操作符和函数:

  1. and/or/not:逻辑运算符。
  2. =/!=/<>/</<=/>/>=:比较运算符。
  3. +/-/*div/mod:算术运算符。
  4. string-length()/substring()/concat()/contains():字符串函数。
  5. count()/sum()/avg()/min()/max():统计函数。

XPath可以在XML文档中定位和选择任意节点,从而方便地实现对XML文档的查询、转换和处理。XPath还可以与XSLT和XQuery等技术结合使用,从而实现对XML文档的转换、查询和分析。

以下是一些XPath路径表达式的示例:

  1. 选择根节点:/
Copy code / 
  1. 选择所有book节点://book
javascriptCopy code //book 
  1. 选择所有具有class属性且class属性值为”highlight”的元素://*[@class=”highlight”]
pythonCopy code //*[@class="highlight"] 
  1. 选择所有price节点,其父节点为book元素,且该price节点的值小于10://book/price[. < 10]
javascriptCopy code //book/price[. < 10] 
  1. 选择所有作者为Neal Stephenson的书籍节点://book[author=”Neal Stephenson”]
bashCopy code //book[author="Neal Stephenson"] 
  1. 选择第一个book节点://book[1]
javascriptCopy code //book[1] 
  1. 选择最后一个book节点://book[last()]
javascriptCopy code //book[last()] 

除了路径表达式外,XPath还支持一些操作符和函数,以下是一些示例:

  1. 选择所有price节点的总和:sum(//price)
bashCopy code sum(//price) 
  1. 选择所有作者为Neal Stephenson的书籍的出版时间://book[author=”Neal Stephenson”]/publish_date
bashCopy code //book[author="Neal Stephenson"]/publish_date 
  1. 选择所有price节点的平均值:avg(//price)
scssCopy code avg(//price) 

XPath是一种十分强大和灵活的定位和选择XML节点的语言,它可以满足各种不同场景下的需求。

完整一点的示例

假设我们有以下这个简单的XML文档:

xmlCopy code <?xml version="1.0" encoding="UTF-8"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> <book id="bk103"> <author>Corets, Eva</author> <title>Maeve Ascendant</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-11-17</publish_date> <description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a new society.</description> </book> <book id="bk104"> <author>Corets, Eva</author> <title>Oberon's Legacy</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2001-03-10</publish_date> <description>In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for the inhabitants of London. Sequel to Maeve Ascendant.</description> </book> <book id="bk105"> <author>Corets, Eva</author> <title>The Sundered Grail</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2001-09-10</publish_date> <description>The two daughters of Maeve, half-sisters, battle one another for control of England. Sequel to Oberon's Legacy.</description> </book> <book id="bk106"> <author>Randall, Cynthia</author> <title>Lover Birds</title> <genre>Romance</genre> <price>4.95</price> <publish_date>2000-09-02</publish_date> <description>When Carla meets Paul at an ornithology conference, tempers fly as feathers get ruffled.</description> </book> <book id="bk107"> <author>Thurman, Paula</author> <title>Splish Splash</title> <genre>Romance</genre> <price>4.95</price> <publish_date>2000-11-02</publish_date> <description>A deep sea diver finds true love twenty thousand leagues beneath the sea.</description> </book> <book id="bk108"> <author>Knorr, Stefan</author> <title>Creepy Crawlies</title> <genre>Horror</genre> <price>4.95</price> <publish_date>2000-12-06</publish_date> <description>An anthology of horror stories about roaches, centipedes, scorpions and other insects.</description> </book> <book id="bk109"> <author>Kress, Peter</author> <title>Paradox Lost</title> <genre>Science Fiction</genre> <price>6.95</price> <publish_date>2000-11-02</publish_date> <description>After an inadvertant trip through a Heisenberg Uncertainty Device, James Salway discovers the problems of being quantum.</description> </book> </catalog> 

我们可以使用XPath来选择其中的元素。例如,要选择所有书的作者和价格,可以使用以下XPath表达式:

xmlCopy code /catalog/book/author | /catalog/book/price 

这个表达式会返回以下结果:

xmlCopy code <author>Gambardella, Matthew</author> <price>44.95</price> <author>Ralls, Kim</author> <price>5.95</price> <author>Corets, Eva</author> <price>5.95</price> <author>Corets, Eva</author> <price>5.95</price> <author>Corets, Eva</author> <price>5.95</price> <author>Randall, Cynthia</author> <price>4.95</price> <author>Thurman, Paula</author> <price>4.95</price> <author>Knorr, Stefan</author> <price>4.95</price> <author>Kress, Peter</author> <price>6.95</price> 

可以看到,这个表达式选择了所有书的作者和价格,并按顺序返回它们的值。

另一个示例是选择所有标题中包含单词”XML”的书。这可以使用以下XPath表达式完成:

xmlCopy code /catalog/book[contains(title, "XML")] 

这个表达式会返回以下结果:

xmlCopy code <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> 

这个表达式选择了ID为”bk101″的书,因为它的标题包含单词”XML”。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/166071.html

(0)
上一篇 2025-01-03 10:15
下一篇 2025-01-03 10:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信