0

Im using http://xpatheval.apphb.com/ this site, which works perfectly, I just have a problem with code and getting the value that I need. I have an XML code here:

<?xml version="1.0"?>
<RIGA>
   <STREET Name="Brivibas">
      <HOUSE No="1">
         <FLAT No="1">
            <INHABITANT Year="1970" Gender="M">Ivanovs Sergejs</INHABITANT>
            <INHABITANT Year="1970" Gender="F">Ivanova Anna</INHABITANT>
         </FLAT>
         <FLAT No="2">
            <INHABITANT Year="1972" Gender="M">Strods Janis</INHABITANT>
            <INHABITANT Year="1972" Gender="F">Strode Inna</INHABITANT>
            <INHABITANT Year="1974" Gender="F">Strode Julija</INHABITANT>
         </FLAT>
      </HOUSE> 
      <HOUSE No="2">
         <FLAT No="1">
            <INHABITANT Year="1974" Gender="M">Zemzars Uldis</INHABITANT>
         </FLAT>
      </HOUSE> 
   </STREET>
   <STREET Name="Elizabetes">
      <HOUSE No="1">
         <FLAT No="1">
            <INHABITANT Year="1985" Gender="M">Celms Juris</INHABITANT>
         </FLAT>
         <FLAT No="2">
            <INHABITANT Year="1988" Gender="M">Dmitrijevs Igors</INHABITANT>
            <INHABITANT Year="1988" Gender="F">Dmitrijeva Svetlana</INHABITANT>
            <INHABITANT Year="1989" Gender="F">Dmitrijeva Olga</INHABITANT>
            <INHABITANT Year="1989" Gender="M">Dmitrijevs Pjotrs</INHABITANT>
         </FLAT>
      </HOUSE> 
   </STREET>
</RIGA>

And the Xquery code I wrote is this:

<MALES>
{let $male:=//INHABITANT[@Gender="M"]
for $male in (1 to 6)
return <MALE>{$male}</MALE>}
</MALES>

Im getting:

<MALES>
   <MALE>1</MALE>
   <MALE>2</MALE>
   <MALE>3</MALE>
   <MALE>4</MALE>
   <MALE>5</MALE>
   <MALE>6</MALE>
</MALES>

But what I need is:

<MALES>
   <MALE>First Name Last Name</MALE>
   <MALE>First Name Last Name</MALE>
   <MALE>First Name Last Name</MALE>
   <MALE>First Name Last Name</MALE>
   <MALE>First Name Last Name</MALE>
   <MALE>First Name Last Name</MALE>
</MALES>

Where have I made a mistake in my code?

I have 0 experience using XML and Xquery

1 Answer 1

1

Instead of the numbers 1 to 6, you’ll need to bind the text node of the XPath expression to the variable:

<MALES>{
  for $male in //INHABITANT[@Gender = "M"]/text()
  return <MALE>{ $male }</MALE>
}</MALES>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.