Xsl с пространством имен XML
Как я выбираю на узле xml, когда xml имеет пространство имен.
Здесь простой xml без пространства имен.
<?xml version="1.0" encoding="utf-8"?> <HouseList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Name>Test</Name> <Id>42</Id> <HList> <House> <Name>Home</Name> <Id>88</Id> <RoomList> <Room> <Name>Kitchen</Name> <Id>21</Id> </Room> </RoomList> </House> </HList> </HouseList>
мой xsl-это:
<pre lang="xml"> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <Root> <List> <HouseListName> <Name> <xsl:value-of select="HouseList/Name"/> </Name> <Rooms> <xsl:for-each select="HouseList/HList"> <Ho> <Name> <xsl:value-of select="House/Name"/> </Name> <R> <xsl:for-each select="House/RoomList"> <Room> <Name> <xsl:value-of select="Room/Name"/> </Name> </Room> </xsl:for-each> </R> </Ho> </xsl:for-each> </Rooms> </HouseListName> </List> </Root> </xsl:template> </xsl:stylesheet>
Транформация с помощью C#
XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load("xslTest.xsl"); xslt.Transform("Ser.xml", "Result.txt");
мой результат таков:
<?xml version="1.0" encoding="utf-8"?><Root><List><HouseListName><Name>Test</Name><Rooms><Ho><Name>Home</Name><R><Room><Name>Kitchen</Name></Room></R></Ho></Rooms></HouseListName></List></Root>
все хорошо и работает.
Теперь я сериализую datacontract своего класса, потому что теперь у меня есть словарь в одном из классов.
Мой XML-это сейчас:
<?xml version="1.0" encoding="utf-8"?><HouseList xmlns="http://schemas.datacontract.org/2004/07/Xsl_Transformer.Data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HList><House><Id>88</Id><Name>Home</Name><Note xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"><a:KeyValueOfstringstring><a:Key>Sinn</a:Key><a:Value>42</a:Value></a:KeyValueOfstringstring><a:KeyValueOfstringstring><a:Key>Egal</a:Key><a:Value>88</a:Value></a:KeyValueOfstringstring></Note><RoomList><Room><Id>21</Id><Name>Kitchen</Name></Room></RoomList></House></HList><Id>42</Id><Name>Test</Name></HouseList>
Как я должен изменить свой xsl для правильного преобразования?
Как я получаю доступ к значению ключа if "Sinn"?
Что я уже пробовал:
прямое использование только xsl-узла xml:
<?xml version="1.0" encoding="utf-8"?><Root><List><HouseListName><Name></Name><Rooms /></HouseListName></List></Root>
У меня есть попробовать следующий сайт:
XSLT преобразование XML с пространствами имен-переполнение стека[^]
я пробую это
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:d="http://schemas.datacontract.org/2004/07/Xsl_Transformer.Data" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/d"> <Root> <List> <HouseListName> <Name> <xsl:value-of select="d:HouseList/Name"/> </Name> <Rooms> <xsl:for-each select="d:HouseList/HList"> <Ho> <Name> <xsl:value-of select="d:House/Name"/> </Name> <R> <xsl:for-each select="d:House/RoomList"> <Room> <Name> <xsl:value-of select="d:Room/Name"/> </Name> </Room> </xsl:for-each> </R> </Ho> </xsl:for-each> </Rooms> </HouseListName> </List> </Root> </xsl:template> </xsl:stylesheet>
я понимаю это
<?xml version="1.0" encoding="utf-8"?>88HomeSinn42Egal8821Kitchen42Test
и без d на match - я имею в виду match= " / " с пространством имен d
я понимаю это
<?xml version="1.0" encoding="utf-8"?><Root xmlns:d="http://schemas.datacontract.org/2004/07/Xsl_Transformer.Data"><List><HouseListName><Name></Name><Rooms /></HouseListName></List></Root>
я читал это, но это даже не сработало
xslt-Как "выбрать" из XML с пространствами имен? - переполнение стека[^]
Что я могу сделать? Есть ли у кого-нибудь ссылка или помощь для меня?
Richard MacCutchan
Если вам нравится какой-то код на StackOverflow, который не работает, то вы должны разместить свой вопрос на этом сайте.
Atlapure Ambrish
Попробуйте такой онлайн-инструмент, как этот, Чтобы быстро настроить XSL и сразу увидеть результат. http://www.utilities-online.info/xsltransformation/#.WXWBh4SGPcs