Мне нужно преобразовать сложный XML в простой XML
Как указано в названии, возможно ли использовать xsl или мне следует посмотреть на VB. Я не программист, но хорошо читаю. Это фрагмент моего XML-кода, и я работал над первым ребенком, если я смогу взломать его, то все остальное должно встать на свои места.
МОЙ XML-ФАЙЛ
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="205.xsl"?> <data> <satellite name="Telstar" longitude="205" lof_hi="10600000" lof_lo="9750000" lof_threshold="11700000" lnb_power="13/18v" signal_22khz="auto" toneburst="none" diseqc1_0="none" diseqc1_1="none" motor="none"> <transponder original_network_id="1" ts_id="65535" frequency="11714000" symbol_rate="25000000" polarisation="H" /> <transponder original_network_id="1" ts_id="65535" frequency="11729000" symbol_rate="25000000" polarisation="V"> <program name="Channel_1 HD" service_id="40805" channel_number="48" type="1" scrambled="false" parental_lock="false" skip="false" id="1500" plp_id="255" sdt_version="28" default_channnel_num="17" lcn="2697" fav="0"> <video pid="165" format="h264" /> <pcr pid="165" /> <audio pid="110" format="ac3" language="spa" /> <audio pid="111" format="ac3" language="dos" /> </program> <program name="Channel_2 HD" service_id="40806" channel_number="14" type="1" scrambled="false" parental_lock="false" skip="false" id="1501" plp_id="255" sdt_version="28" default_channnel_num="18" lcn="2698" fav="0"> <video pid="160" format="h264" /> <pcr pid="160" /> <audio pid="80" format="ac3" language="spa" /> <audio pid="81" format="ac3" language="qaa" /> </program> <program name="Channel_3 HD" service_id="40807" channel_number="34" type="1" scrambled="false" parental_lock="false" skip="false" id="1502" plp_id="255" sdt_version="28" default_channnel_num="19" lcn="2699" fav="0"> <video pid="161" format="h264" /> <pcr pid="161" /> <audio pid="86" format="ac3" language="spa" /> <audio pid="87" format="ac3" language="qaa" /> </program> </transponder> </satellite> </data>
МОЙ XSL
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="XML" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <xsl:element name="Servicelist"> <xsl:element name="satellite"> <xsl:text></xsl:text> <xsl:for-each select = "data"> <xsl:text>SatId 1 /SatId </xsl:text> <xsl:text></xsl:text> <xsl:for-each select="satellite"> <xsl:value-of select="@name" /> <xsl:text></xsl:text> <xsl:value-of select="@lof_lo" /> <xsl:text></xsl:text> <xsl:value-of select="@lof_hi" /> <xsl:text></xsl:text> <xsl:value-of select="@lof_threshold" /> <xsl:text></xsl:text> <xsl:value-of select="@longitude" /> <xsl:text></xsl:text> <xsl:text>0 </xsl:text> <xsl:text></xsl:text> </xsl:for-each> </xsl:for-each> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet>
МОЙ ВЫХОД
<?xml version="1.0" encoding="UTF-8"?> <Servicelist> <satellite> SatId 1 /SatId Telstar 9750000 10600000 11700000 205 0 </satellite> </Servicelist>
НЕОБХОДИМЫЙ КОД
<?xml version="1.0" encoding="UTF-8"?> <Servicelist> <Satellite> <SatId>1</SatId> <SatName>Telstar</SatName> <LO1Frequency>9750</LO1Frequency> <LO2Frequency>10600</LO2Frequency> <BandSwitchFreq>11700</BandSwitchFreq> <Longitude>205</Longitude> <SkewOffset>0</SkewOffset> </Satellite> <Servicelist>
Что я уже пробовал:
Мне нужно выяснить, как получить отображаемые элементы (например, "спутник"), а также как переименовать элементы... Кроме того, элемент <satid> отсутствует в исходном xml, поэтому я добавил его в xsl как текст, но xsl выдает мне ошибку, если я добавляю теги кода (<>). Правильно ли я поступаю с xsl или мне следует использовать другой подход?? Любой совет приветствуется и благодарю вас.