• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

blueomega

Strings em XQuery, Xpath, Xslt

4 mensagens neste tópico

Estou a fazer uns exercícios sobre xml pra um exame e surgiu em mais que um exame, algo que não consigo resolver(esta tudo relacionado)

Ignorar os comentários, eram alineas do exame. Aqui vai parte do XML

<?xml encoding="UTF-8"?> <!--1a)Falta a versão do xml. <?xml version="1.0" encoding="UTF-8"?>-->
<!DOCTYPE eleicao SYSTEM "eleicao.dtd" >
<?xml-stylesheet type="text/xsl" href="eleicao.xslt"?>

<eleicao>
    <tipo>presidencial</tipo>
    <totalEleitores>8806400</totalEleitores>
    <candidatos>
        <candidato id="c1" apoios="p2">Acabado</candidato>
        <candidato id="c2">Cassete</candidato>
        <candidato id="c3" apoios="p2 p3">Trotska</candidato>
    </candidatos>
    <partidos>
        <partido id="p1" nome="Laranja"/>
        <partido id="p2" nome="Rosa"/>
        <partido id="p3" nome="Lima"/>
        <!--1b)id é o tipo ID, logo unico. não podes existir 2 partidos com o id=p3"-->
        <partido id="p3" nome="Abacate"/>
    </partidos>
<eleicao>

Ao fazer expressões xquery, xslt e xpath notei que se um atributo tiver multiplos ids, não os consigo obter(ou melhor não os consigo separar e percorrer)

por exemplo no bocado do xml em baixo

<candidato id="c1" apoios="p2">Acabado</candidato>

Obter o partido de id="p2" é simples, seja em qualquer tipo de expressão.

mas em

<candidato id="c3" apoios="p2 p3">Trotska</candidato>

não consigo separar o p2 e p3 para obter a informação de cada apoio. Alguém dá uma ajuda, em principio com a ajuda em xpath devo conseguir derivar para xslt e xquery

Uma questão extra, se:

<candidato id="c1" apoios="p2">Acabado</candidato>

Se apoios for definido(no dtd por exemplo) como IDref, so pode ter um ID, se for definido como IDrefs pode ter multiplos ID's.

A questão é: Ao ter multiplos ID's, obriga que sejam todos do mesmo tipo(referir o mesmo tipo de elementos)

Cumps

Blueomega

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol, ja descobri a solução, era algo mesmo basico

basta algo como:

<xsl:for-each select="@apoios">
<!--do stuff-->
</xsl:for-each>

pensei que o for each era so pra elementos e não atributos

mas se alguem souber a resposta a segunda pergunta chute

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estava na ideia que um elemento só podia ter um atributo do tipo ID.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol, ja descobri a solução, era algo mesmo basico

basta algo como:

<xsl:for-each select="@apoios">
<!--do stuff-->
</xsl:for-each>

pensei que o for each era so pra elementos e não atributos

mas se alguem souber a resposta a segunda pergunta chute

Não sei que raio de testes fiz de manha, mas isto não é possível(salvo erro os atributos estão todos no mesmo no). resolvi com o uso de contains

Não me referi bem em cima, Rui Carlos, cada elemento so pode ter um ID, mas pode ter múltiplas referencias para outros elementos (IDREFS).

Sera que posso misturar referencias? acho que é

É possível num dtd limitar as referencias a um tipo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora